2013-08-21 2 views
0

Fluent NHibernate를 사용하는 데이터베이스에 부모 객체를 삽입하려고합니다. 이 객체는 자식을 가지며이 자식은 이미 데이터베이스에 저장되어 있습니다. 이 아이에게서 이드를 가져라.Fluent NHibernate - NHibernate에 의해 자식 객체를 삽입하지 않는 방법

자식 개체에만 ID를 설정하는 외래 키 (자식)와 함께 부모 개체를 삽입하려면 어떻게해야합니까?

예 :

ObjectParent parent = new ObjectParent(); 
ObjectChild child = new ObjectChild(); 

child.Id = 5; // 5 is the id from the child in the database 
parent.Child = child; 

Service.Create(parent); // here I need to insert the parent with the referenced foreign key (id = 5) 

편집 :

나는 데이터베이스에서 자식 개체를 얻을 수 없습니다.

답변

1

NHibernate 레벨에서 ISession으로 생성 된 프록시를 사용할 수 있습니다.

확실한 경우 ID (예 : 5)가 존재하는 경우 session.Load<Child>(5)으로 전화 할 수 있습니다. 실제로는 전혀로드 할 필요가없는 proxy을 반환합니다. 부모에 프록시를 넣기 만

Create(Parent parent, int childId)// = 5) 
{ 

    child = session.Load<Child>(5); 

    parent.Child = child; 

    session.Save(parent); 

확장 부모의 INSERT 문을 발행합니다 :

참조를 처리하는 방법을 또 다른 방법은 다른 매핑 될 수 있습니다. 나는 보통이 두 참조의 속성과 그 RefererenceId 사용하지만, 업데이트 가능한 ID의 proeprty

<property not-null="true" name="ChildId" /> 
<many-to-one name="Child" column="ChildId" insert="false" update="false" /> 

그리고 두 속성을 갖는 부모와 유사한 솔루션을 사용하는 사용자의 경우

<property not-null="true" name="ChildId" insert="false" update="false" /> 
<many-to-one name="Child" column="ChildId" /> 

을, 해결책은 될 수

class Parent 
{ 
    public virtual Child Child { get; set; } 
    public virtual int ChildId { get; set; } 

그리고

parent.ChildId = 5; 
같은 코드
+0

데이터베이스에서 하위 항목을 가져올 수 없습니다. –

+0

다른 접근 방식을 제공했습니다. 이것은 당신을 위해, 당신은 매핑을 변경하고 부모에 ChildId 속성을 소개해야합니다 작동합니다 –

0

stateless session은 기본적으로 (하위) 엔터티 간의 관계는 신경 쓰지 않으므로 사용하십시오. 실제 성능 향상을 가져옵니다. 예제는 my post 안에 있습니다.