NHibernate对父实体具有相同子实体引用的多个父实体

NHibernate对父实体具有相同子实体引用的多个父实体,nhibernate,reference,parent-child,one-to-many,fluent,Nhibernate,Reference,Parent Child,One To Many,Fluent,我有一个具有两个父级的数据结构,可以有相同类(实体)类型的子级 公共类Parent1:BaseParent { 公共家长1() { Childs1=新列表(); } 公共虚拟IList Child1{get;set;} } 公共类Parent2:BaseParent { 公共家长2() { Childs2=新列表(); } 公共虚拟IList Child2{get;set;} } 公营儿童 { 公共虚拟基父级{get;set;} } 子级应该有对其父级的引用,它属于父级的集合。这意味着,如果C

我有一个具有两个父级的数据结构,可以有相同类(实体)类型的子级

公共类Parent1:BaseParent
{
公共家长1()
{
Childs1=新列表();
}
公共虚拟IList Child1{get;set;}
}
公共类Parent2:BaseParent
{
公共家长2()
{
Childs2=新列表();
}
公共虚拟IList Child2{get;set;}
}
公营儿童
{
公共虚拟基父级{get;set;}
}
子级应该有对其父级的引用,它属于父级的集合。这意味着,如果Child在Parent1.Childs1的集合中,Child.Parent应该引用Parent1。如果Child在Parent2.Childs2的集合中,则Child.Parent应引用Parent2

我试过了

public class Parent1Map: ClassMap<Parent1>
{
    public Parent1Map()
    {
        Table("PARENT1");
        :
        HasMany<Child>(x => x.Child1).KeyColumn("PARENT1REF");
    }
}

public class Parent2Map: ClassMap<Parent2>
{
    public Parent2Map()
    {
        Table("PARENT2");
        :
        HasMany<Child>(x => x.Child1).KeyColumn("PARENT2REF");
    }
}

public class ChildMap: ClassMap<Child>
{
    public ChildMap()
    {
        Table("CHILD");
        :
        References<Parent1>(c => c.Parent).Column("PARENT1REF");
        References<Parent2>(c => c.Parent).Column("PARENT2REF");
    }
}
公共类Parent1Map:ClassMap
{
公共Parent1Map()
{
表(“家长1”);
:
HasMany(x=>x.Child1).KeyColumn(“PARENT1REF”);
}
}
公共类Parent2Map:ClassMap
{
公共Parent2Map()
{
表(“家长2”);
:
HasMany(x=>x.Child1).KeyColumn(“PARENT2REF”);
}
}
公共类ChildMap:ClassMap
{
公共儿童地图()
{
表(“儿童”);
:
引用(c=>c.Parent).Column(“PARENT1REF”);
引用(c=>c.Parent).Column(“PARENT2REF”);
}
}
但这是行不通的。我发现在已经添加多个“父项”时,尝试将多个添加到一个“父项”时出错


如何进行映射,以便从数据库中正确加载子对象的父引用?

我遇到了类似的问题,并使用了referenceany。仅当子项从不在多个集合中时才适用

// ChildMap
ReferencesAny(result => result.Parent)
    .EntityTypeColumn("discriminator")
    .EntityIdentifierColumn("Parent_id")
    .IdentityType<long>()
    .AddMetaValue<Parent1>("parent1")
    .AddMetaValue<Parent2>("parent2");


// parent1map
HasMany(part => part.Childs)
    .Where("discriminator = 'parent1'");
//ChildMap
ReferencesAny(result=>result.Parent)
.EntityTypeColumn(“鉴别器”)
.EntityIdentifierColumn(“父项id”)
.IdentityType()
.AddMetaValue(“父项1”)
.AddMetaValue(“父项2”);
//parent1map
HasMany(part=>part.Childs)
。式中(“鉴别器='parent1'”;
// ChildMap
ReferencesAny(result => result.Parent)
    .EntityTypeColumn("discriminator")
    .EntityIdentifierColumn("Parent_id")
    .IdentityType<long>()
    .AddMetaValue<Parent1>("parent1")
    .AddMetaValue<Parent2>("parent2");


// parent1map
HasMany(part => part.Childs)
    .Where("discriminator = 'parent1'");