자식 테이블에서 복합 매핑 여기 만 간다 :유창함 NHibernate에 - 그것은 아마도 유창함 수행 할 수 없습니다 이전 쿼리보고 - - 나는 확실히 누군가가 전에 이런 짓을했는지하는 생각
나는 다음과 같은 매핑을
자식 테이블의 키가 부모 테이블과 일치하지 않으므로이 키가 작동하지 않을 수 있으므로 외부 키 계약의 필드 수가 일치하지 않으므로 오류가 발생합니다. 그러나, 나는 기본 테이블을 변경할 수없고 관계도 유효합니다. 유창한 nhibernate에서이 문제를 해결할 수있는 방법이 있습니까? 두 복합 필드에서 예상되는 조인을 무시하고 일치하는 필드 (예 : field_one?)에서만 조인 할 수 있습니다. Hibernate는 필드 1과 필드 2가 두 매핑 모두에 존재할 것으로 예상합니다. ChildDataMap FieldOne 값이 항상 ParentMap FieldOne 및 FieldOne 나타나는 경우
public ParentMap()
{
Table("dbo.SOMEPARENT");
OptimisticLock.None();
LazyLoad();
CompositeId()
.KeyReference(x => x.FieldOne, x => x.Access.CamelCaseField(Prefix.Underscore), "field_one")
.KeyReference(x => x.FieldTwo, x => x.Access.CamelCaseField(Prefix.Underscore), "field_two");
HasMany(x => x.ChildData)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.AllDeleteOrphan()
.KeyColumns.Add("field_one")
.NotFound.Ignore();
}
public ChildDataMap()
{
Table("dbo.SOMECHILD");
OptimisticLock.None();
LazyLoad();
CompositeId()
.KeyProperty(x => x.FieldOne, x => x.Access.CamelCaseField(Prefix.Underscore).ColumnName("field_one"))
.KeyProperty(x => x.FieldTwo, x => x.Access.CamelCaseField(Prefix.Underscore).ColumnName("field_two"))
.KeyProperty(x => x.FieldThree, x => x.Access.CamelCaseField(Prefix.Underscore).ColumnName("field_three"))
.KeyProperty(x => x.FieldFour, x => x.Access.CamelCaseField(Prefix.Underscore).ColumnName("field_four"));
Map(x=>x.DontExecTrigger).Column("dont_exec_trigger").Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.DateField).Column("date_field").Access.CamelCaseField(Prefix.Underscore);
Map(x=>x.DataField).Column("data_field").Access.CamelCaseField(Prefix.Underscore);
References(x => x.Parent)
.Access.CamelCaseField(Prefix.Underscore)
.Cascade.All()
.Fetch.Select()
.Columns("field_one")
.NotFound.Ignore()
.Not.LazyLoad();
}보기의 순수 데이터베이스 관점에서
너무 늦었 어! 어떤 기술을 사용할 수 있었습니까? – philipxy
안녕하세요. 나는 데이타베이스의 표현을 제공하는 뷰를 쓰도록 DB를 얻었습니다. NHibernate가 이런 종류의 시나리오를 허용하지 않는다는 결론에 도달해야합니다. 기본 데이터베이스는 관계가 매우 느슨하므로보기가 가장 깨끗한 옵션처럼 보입니다. 회신을위한 건배, 그러나 .. –