我有一个包含两个父项的数据结构,可以有相同类(实体)类型的子项。
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");
}
}
但这不起作用。我发现错误尝试添加多对一“父”已添加。
如何进行映射,以便从数据库中正确加载子项的父引用?
答案 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'");