2011-06-11 5 views
0

내 응용 프로그램 코드에서 조인입니다이사용이 NHibernate에

테이블처럼 다음

tblPerson 
--------- 
PersonId (PK) 
Name 

tblAddress 
---------- 
AddressId(PK) 
Address 

PersonAddress 
------------- 
PersonId (PK) 
AddressId 

Entity 클래스

PersonAddresstbl.cs

public class PersonAddressl 
{ 
    private int personid; 
    private int addressid; 
    private string name; 

    public virtual int PersonId 
    { 
     get { return personid; } 
     set { personid = value; } 
    } 

    public virtual int AddressId 
    { 
     get { return addressid; } 
     set { addressid = value; } 
    } 

    public virtual string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 
} 

XML 파일

PersonAddresstbl.hbn.xml

<class name="PersonAddressl"> 
    <id name="id" column="PersonId"> 
    <generator class="native"/> 
    </id> 
    <join table="tblPersonAddress" 
     optional="true"> 
    <key column="PersonId" 
     unique="true"/> 
    <many-to-one name="Address" 
     column="AddressId"/> 
    </join> 
</class> 

<class name="tblAddress"> 
    <id name="id" column="AddressId"> 
    <generator class="native"/> 
    </id> 
</class> 

구현

PersonAddresstbl tbl = new PersonAddresstbl(); 

Criteria crit = session.CreateCriteria(typeof(PersonAddresstbl)); 
IList lst = crit.List(); 

0을 반환 기록이다.

누구나 내가 올바른 경로에 있거나 내가 잘못 가고 있다고 말할 수 있습니까?

감사합니다, 파반

+0

1) 귀하의 매핑 'ID'하지만 클래스가있다 'personid'속성 여기 조인 속성에 대한 좀 더 많은 정보를보기 바란다. 2) 테이블에 'tbl'접두어가 붙은 이유는 무엇입니까? 이것은 1990 년이 아닙니다 ... 3) 귀하의 'personaddress'는 기본 키가 두 열이 아닌 이유는 무엇입니까? 그것은 many-to-many입니다. – Phill

+0

@Phil - re (2), 스타일을 비판 할 필요는 없습니다. – csano

+0

@ j0k - 물론입니다 :) 사람들이 스타일을 개선하는 데 도움을줍니다. 한 번에 1 개의 비평. – Phill

답변

1

그것은 문제가 무엇인지 말해 어렵지만, 문제 해결 show_sql 수 있도록하는 것입니다 때 난 항상 내가 생성됩니다 SQL을 볼 수 있습니다 nHibernate 수와 함께 사용할 일이 (그래서 당신은에 그것을 시도 할 수 있습니다 데이터베이스 쿼리 창). - 글쎄, 그것은이 내가 이상한 찾아 Enable show_sql in nHibernate

+0

안녕하세요 Haukman, 답장을 보내 주셔서 감사합니다. 내가 제안한 해결책으로 시도했다. 출력 창에 sql이 자동으로 표시됩니까? 아니면이 명령을 사용해야합니까? – pavan

+0

@pavan - 매핑을 먼저 수정해야합니다. 그들은 모두 여기 저기에있다. – Phill

+0

자동으로 표시됩니다. 그러나 @Phill이 지시하는 것처럼 매핑이 약간 이상하게 보입니다. – Haukman

0

, 클래스 'Person'는 Person 클래스의 (동안 당신의 매핑에, 정수 유형입니다 속성 'AddressId'을 가지고 있다는 것입니다 : 정보를 원하시면이 링크를 참조하십시오 이상한 이름 PersonAddressl'- 클래스 'Address'과 일대 다 관계가 있음을 지정합니다. 그 다음으로 클래스가 'Address'이 아닙니다. 그리고 데이터베이스 모델은 사람과 주소 사이에 다 대다 관계를 가지고 있습니다.

join 매핑을 사용하면 두 개의 데이터를 '병합'할 수 있습니다 atabase-tables를 하나의 클래스로 만들지 만 클래스 모델은이를 반영하지 않습니다. http://ayende.com/blog/3961/nhibernate-mapping-join

가 밖으로도 '설정'확인 : http://ayende.com/blog/3943/nhibernate-mapping-set

+0

안녕하세요, XML 파일을 만들려면 http://docs.jboss.org/hibernate/core/3.5/reference/en/html/associations.html (7.3.2. 다 대일) 문서를 참조하십시오. PersonID, 이름 (가져 오기, 설정) 및 사람, 주소 (가져 오기, 설정)가있는 tblAddress.cs가 포함 된 tblPerson.cs PersonAddresstbl.cs가있는 경우 cs 파일은 무엇입니까? 필수는 아니며 xml 파일은 tblperson 및 tblAddress 클래스 파일에 매핑되어야합니다. – pavan

+0

올바른 코드를 얻을 수 있습니까 ??? – pavan