Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FluentNHibernate-具有子类的多个引用的问题,其中引用位于父类中_C#_Inheritance_Nhibernate_Fluent Nhibernate_Mapping - Fatal编程技术网

C# FluentNHibernate-具有子类的多个引用的问题,其中引用位于父类中

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{

我想引用父类和它的子类,但我对下面的结构有一个问题。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");
        ...
    }
}
公共类容器{
公共虚拟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

如何正确映射此结构