2012-03-15 3 views
0

나는 다음과 같은 상황이 :복합 모델 삽입 문제

public Parent 
{ 
    public ChildOne C1 {get;set;} 
    public ChildTwo C2 {get;set;} 
} 

public ChildOne 
{ 
    public int Id{get;set;} 
...some primitive fields 
} 

public ChildTwo 
{ 
    public int Id{get;set;} 
...other primitive fields 
} 

이러한 클래스에 대한 매핑은 다음과 같습니다

내가 2 개 클래스 (아이를) 가지고 복합 클래스 (부모) :

public class Parent: ClassMap<Parent> 
    { 
     public ParentMap() 
     { 
      Table("Parents"); 
      Id(x => x.Id).Column("ParentId"); 
      References(x => x.C1).Column("ChildOneId"); 
      References(x => x.C2).Column("ChildTwoId"); 
     } 
    } 

public class ChildOne: ClassMap<ChildOne> 
    { 
     public ChildOneMap() 
     { 
      Table("ChildOnes"); 
      Id(x => x.Id).Column("ChildOneId"); 
      ...other Mappings for primitive types 
     } 
    } 

(ChildTwo의 경우에도 동일).

는 DB는 다음과 같다 :

Parents: ParentId, ChildOneId, ChildTwoId 
ChildOne: ChildOneId, ...other columns 
ChildOne: ChildTwoId, ...other columns 

과 관계 ChildOneId (부모) < ==> ChildOneId (ChildOnes).

해당 하위 항목과 함께 Db에 새 상위 항목을 삽입하려는 경우 ChildOneId/ChildTwoId가 null 일 수 없다는 오류가 발생합니다.

삽입이 작동하려면 매핑 클래스에 무엇을 지정해야합니까?

감사합니다 (검색 작업이 제대로 작동), Tamash

+0

부모 개체를 만드는 데 사용하는 코드와 ChildOne 및 ChildTwo 속성을 채우는 방법을 게시 할 수 있습니까? –

답변

1

난 당신이 차일에 저장 호출하지 말아 같아요.

session.Save(new Parent { C1 = new ChildOne(), C2 = new ChildTwo() }); 

상위에서 하위 항목 저장을 수행하려면 계단식 연결을 사용하십시오.

References(x => x.C1).Column("ChildOneId").Cascade.All(); 
References(x => x.C2).Column("ChildTwoId").Cascade.All(); 
+0

매력처럼 작동했습니다! 고마워! –