2010-10-15 85 views
1

我有一種情況,我需要將圖形數據結構存儲在數據庫中。FluentNHibernate將多對多映射到同一實體還是映射圖?

這意味着一個實體可以有無限數量的相同類型的相關實體(相關實體也可以具有無限的相關實體)。

我在想多對多的關係能解決我的問題。

我試圖做映射與FluentNHibernate,但下面的代碼不會生成CREATE TABLE爲EntityEntity表的SQL:

HasManyToMany(x => x.RelatedEntities).ChildKeyColumn("RelateEntityID").ParentKeyColumn("EntityID"); 

難道我做錯了什麼?或者我應該創建一個單獨的實體並使用HasMany()進行映射?

非常感謝!

回答

1

關於你的問題,我將創建一個有一個父母和一個孩子列表的實體。

這裏是我的示例:

public class GrafNode : AdvanceEntity 
    { 
     public GrafNode() 
     { 
      this.Children = new List<GrafNode>(); 
     } 

     public virtual string Name { get; set; } 

     public virtual GrafNode Parent { get; set; } 

     public virtual IList<GrafNode> Children { get; private set; } 

     public virtual void AddChild(GrafNode node) 
     { 
      node.Parent = this; 
      this.Children.Add(node); 
     } 
    } 

和映射覆蓋類:

public class GrafNodeMappingOverride : IAutoMappingOverride<GrafNode> 
{ 
    public void Override(AutoMapping<GrafNode> mapping) 
    { 
     mapping.HasOne(x => x.Parent); 
     mapping.HasMany(x => x.Children).KeyColumn("parentId"); 
    } 
} 

,你可以看到一個節點可以有一個家長和孩子的名單。

,這裏是我的表結構,請忽略DeletedBy和DeletedDate(奧爾AdvanceEntity是軟刪除的實體)

alt text

如果你需要一些單元測試,看看它是如何工作的,讓我知道。

+0

謝謝。這讓我有很多想法:) – 2010-10-22 10:58:32