我想引用父类及其子类,但我对下面的结构有疑问。 NHibernate在父表和子表中生成引用列。
public class Container{
public virtual IEnumerable<SomeClass> SomeClasses {get;set;}
public virtual IEnumerable<SomeSubClass> SomeSubClasses {get;set;}
}
public class SomeClass{
public virtual Container Container {get;set;}
...
}
public class SomeSubClass: SomeClass{
...
}
public class ContainerMap: ClassMap<Container>{
public ContainerMap(){
Table("Container");
...
HasMany(x => x.SomeClasses)
.KeyColumn("ContainerID")
.Cascade.AllDeleteOrphan()
.LazyLoad()
.Inverse()
.AsBag();
HasMany(x => x.SomeSubClasses)
.KeyColumn("ContainerID")
.Cascade.AllDeleteOrphan()
.LazyLoad()
.Inverse()
.AsBag();
...
}
}
public class SomeClassMap: ClassMap<SomeClass>{
public SomeClassMap(){
Table("Parent");
...
References(x => x.Container, "ContainerID").Cascade.SaveUpdate();
...
}
}
public class SomeSubClassMap: SubclassMap<SomeClass>{
public SomeSubClassMap(){
Table("Child");
...
}
}
我找到解决方法的唯一方法是指定映射,如下所示:
HasMany<SomeClass>(x => x.SomeSubClasses)
.KeyColumn("ContainerID")
.Cascade.AllDeleteOrphan()
.LazyLoad()
.Inverse()
.AsBag();
有了这个,NHibernate不会在子表中生成ContainerID列,但是在加载填充了IEnumerable的容器时我得到一个异常。例外:
System.ArgumentException:值&#34; Models.SomeClass&#34;不属于&#34; Models.SomeSubClass&#34;并且不能在此通用集合中使用。 参数名称:值
如何正确映射此结构?