C# FluentNHibernate-具有子类的多个引用的问题,其中引用位于父类中
我想引用父类和它的子类,但我对下面的结构有一个问题。NHibernate在父表和子表中生成引用列C# FluentNHibernate-具有子类的多个引用的问题,其中引用位于父类中,c#,inheritance,nhibernate,fluent-nhibernate,mapping,C#,Inheritance,Nhibernate,Fluent Nhibernate,Mapping,我想引用父类和它的子类,但我对下面的结构有一个问题。NHibernate在父表和子表中生成引用列 public class Container{ public virtual IEnumerable<SomeClass> SomeClasses {get;set;} public virtual IEnumerable<SomeSubClass> SomeSubClasses {get;set;} } public class SomeClass{
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");
...
}
}
公共类容器{
公共虚拟IEnumerable SomeClass{get;set;}
公共虚拟IEnumerable子类{get;set;}
}
公共类{
公共虚拟容器{get;set;}
...
}
公共类SomeSubClass:SomeClass{
...
}
公共类容器映射:类映射{
公共容器映射(){
表格(“容器”);
...
HasMany(x=>x.SomeClasses)
.KeyColumn(“集装箱”)
.Cascade.alldelete孤儿()
.LazyLoad()
.Inverse()
.AsBag();
HasMany(x=>x.somesubclass)
.KeyColumn(“集装箱”)
.Cascade.alldelete孤儿()
.LazyLoad()
.Inverse()
.AsBag();
...
}
}
公共类SomeClassMap:ClassMap{
公共类映射(){
表(“母公司”);
...
引用(x=>x.Container,“ContainerID”).Cascade.SaveUpdate();
...
}
}
公共类SomeSubclass映射:Subclass映射{
公共子类映射(){
表(“儿童”);
...
}
}
我找到的唯一解决方法是指定映射,如下所示:
HasMany<SomeClass>(x => x.SomeSubClasses)
.KeyColumn("ContainerID")
.Cascade.AllDeleteOrphan()
.LazyLoad()
.Inverse()
.AsBag();
HasMany(x=>x.somesubclass)
.KeyColumn(“集装箱”)
.Cascade.alldelete孤儿()
.LazyLoad()
.Inverse()
.AsBag();
这样,NHibernate就不会在子表中生成ContainerID列,但在加载同时填充了IEnumerable和IEnumerable的容器时,我会遇到一个异常。例外情况:
System.ArgumentException:值“Models.SomeClass”不是“Models.SomeSubClass”类型,不能在此泛型集合中使用。
参数名称:value
如何正确映射此结构