2010-01-05 6 views
1

나는 다음과 같은 설정을 가지고했습니다 : 나는 ParentEntity을 저장 관리하고,뿐만 아니라 저장된 추가 된 자식 개체에 저장 캐스 캐 이드NHibernate에 부모/자식 관계

public class ParentEntity 
{ 
    public ICollection<ChildEntity> {get; set; } 
} 

public class ChildEntity 
{ 
    // do i need to the parent here? 
} 

. 그러나 db 테이블에서 하위의 ParentId 참조는 NULL을 허용하도록 설정되었습니다. NOT NULL로 설정하면 자식 테이블의 ParentId가 NULL이므로 저장이 실패합니다.

무슨 일입니까? ;)

+1

1. 매핑을 수행하기 위해 부모가 필요하지 않습니다. 어쩌면 다른 뭔가가 필요할 것 같은가요? 2. mappig 수행 방법을 모르면 답을 줄 수는 없습니다 – Paco

답변

1

당신은 일반적으로 관계의 양쪽을지도해야하며, 부모의 컬렉션에 아이를 추가 할 때, 당신은 또한 자녀에 대한 부모의 속성을 설정해야합니다. 일반적으로이 같은 방법을 작성하여이를 것 :

public void AddChild(ChildEntity child) 
{ 
    this.Children.Add(child); 
    child.Parent = this; 
} 

자 NHibernate는 ChildEntity 클래스의 매핑 속성을 기준으로 자식 테이블에있는 ParentId 열을 지속. 일대 다 관계의 정의는 NHibernate가이 컬럼의 값을 기반으로 데이터베이스로부터 콜렉션을로드하는 것을 허락한다.

+3

정상적으로 수행하지 마십시오. 모든 작업을 수행하면 거의 모든 엔티티가 서로 연결됩니다 (앱이 커지면 스파게티 코드). 바운드 컨텍스트를 사용할 수 없습니다. 어떤 관계는 양방향이어야합니다. 특히 부모와 자식이 둘 다 집계 된 뿌리이지만 부모가 자식 인 경우에는 대부분 시간이 걸립니다. 단방향 관계가 더 좋을 것입니다. – Paco

0

동일한 문제점이있어서 nHibernate가 외부 키 컬럼을 노출 시키거나, 컬렉션을 통해 클래스에서 수행하십시오.

문제점 : nHibernate가 콜렉션 오브젝트 (예 : IList)를 작성하고 기본 콜렉션의 add 이벤트를 대체하거나 청취 할 수 없습니다.

이것은 WCF RIA Services 프레임 워크에서 필요하기 때문에 문제가됩니다.