NHibernate多个父母具有相同的子实体参考父母

时间:2011-09-26 13:03:11

标签: nhibernate reference parent-child one-to-many fluent

我有一个包含两个父项的数据结构,可以有相同类(实体)类型的子项。

public class Parent1 : BaseParent
{
    public Parent1()
    {
        Childs1 = new List<Child>();
    }
    public virtual IList<Child> Child1 { get; set; }
}

public class Parent2 : BaseParent
{
    public Parent2()
    {
        Childs2 = new List<Child>();
    }
    public virtual IList<Child> Child2 { get; set; }
}

public class Child
{
    public virtual BaseParent Parent { get; set; }
}

Child应该引用它的父集合,它的集合属于它的集合。这意味着,如果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");
    }
}

但这不起作用。我发现错误尝试添加多对一“父”已添加

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

1 个答案:

答案 0 :(得分:2)

我有类似的问题,并参考了。只有当孩子从不在一个集合中时才适用。

// 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'");