나는 다음 클래스 tructure이에게 있습니다 유창함 NHibernate에있는 다 대다 관계.매핑 관계의 한 구성 요소
public class SearchTarget : IEntity {
public virtual String Name { get; set; }
}
public partial class PoliceAssistance {
public virtual Search SearchWithWarrant { get; set; }
public virtual Search SearchWithoutWarrant { get; set; }
public class Search : IEntityComponent {
public virtual IList<SearchTarget> Targets { get; set; }
}
}
IEntityComponent
는 PoliceAssistance.Search
해당된다 SearchWithWarrant
및 SearchWithoutWarrant
PoliceAssistance
가 동일한 테이블에 저장 유창함 NHibernate에의 자동 매핑의 구성 요소로 취급되는 것을 보장한다.
문제
PoliceAssistance.Search.Targets
및 SearchTarget
있어야 대다 관계 - 하나 개의 검색 많은 목표를 포함 할 수 있으며, 하나 개의 목표는 많은 검색에 표시 할 수 있습니다. 모두 SearchWithWarrant
및 SearchWithoutWarrant
인스턴스화하는 경우에도하고 목록에서 하나 이상의 Target
이 - 나는 PoliceAssistance.Search
에 단방향 .HasManyToMany()
매핑을 지정하는 경우
, 나는 내가 엔티티를 저장하려고 할 때 "null 값이 null 이외의 제약 조건을 위반"GET . 내가 SearchTarget
에 public virtual IList<PoliceAssistance.Search> InSearches { get; set; }
속성을 도입하고 .HasManyToMany().Inverse()
로 매핑하여, 양방향 매핑을 지정하려고하면
, 나는이 매핑되지 않기 때문에 PoliceAssistance.Search
가 참조 할 수 없다는 매핑 오류 (구성 요소가 때로 믿을 나는 매핑 유형을 추측 ' t는 매핑 된 것으로 간주?).
는이 문제를 어떻게 해결해야합니까?
Nhibernate가 대신이 작업을 수행합니다. 릴레이션을 정의하고 필요한 경우 모든 테이블이 자동으로 만들어지고 연결됩니다. –
그래, 난 이미 그런 일을 할 것이라는 점을 이해하지만, 내가 말하고 모두가 다 대다 관계가 1 개 연결 실체와이 개 기관 toghether 연결에 의해 수행된다는 점이다. 지금 생각한 일은 프레임 워크가 데이터베이스 모델로 변환 할 수 없다는 것입니다. 왜냐하면 유효한 다 대 다 관계가 아니기 때문입니다.이 트릭은 코드에서만 작동합니다. 나는 당신의 지점을 오해하지 않는 한 – ikwillem
은 즉, 다시, NHibernate에이 바로 이러한 작업을 수행하는 것 - 그것은 링크 테이블을 생성하고 코드 측에 번역을 관리합니다. 나는 그것을 이전에 해왔고, 여러 다른 시나리오 (두 개가 아닌 하나의 속성을 제외하고는 거의 똑같은 시나리오조차도)에서 작동했습니다. 그러나 "적절한"해결책을 찾지 못하면 당신의 대답이 의미가 있습니다. –