2011-09-26 37 views
1

我有一個數據結構與兩個父母,可以有同一類(實體)類型的孩子。NHibernate的多個父母具有相同的子實體參考家長

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位於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

我有一個類似的問題,並與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'"); 
相關問題