2009-10-10 89 views
4

我有一個簡單的類,它看起來像這樣...與自我參照功能NHibernate automappings

public class Item { 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual int ParentId { get; set; } 

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

    public Item() { 
     Children = new List<Item>(); 
    } 
} 

...其中ID是主鍵和的ParentId是外鍵。當我運行這段代碼時,我得到了無效的對象名'ItemToItem'。異常,我不明白什麼是錯的?我似乎NHibernate試圖從一個名爲ItemToItem或類似的表中選擇?

回答

0

是的。流利的nhibernate認爲這是一種多種多樣的關係。我不知道如何創建你想要的關係類型。你可能至少要設置一個成員:

public virtual Item Parent{ get; set; } 
+0

的父項偉大的工作,但是從我的崗位除外仍然存在。 – Marcus 2009-10-10 13:53:48

7

正確的方式進行自我基準

// Class 
public class Item 
{  
    public virtual int Id { get; set; }  
    public virtual string Name { get; set; }  
    public virtual Item Parent { get; private set; } 
    public virtual IList<Item> Children { get; set; }  
    public Item() {   
     Children = new List<Item>();  
    } 
} 

// Map 
References(x => x.Parent).Column("ParentId"); 
HasMany(x => x.Children).Cascade.All().KeyColumn("ParentId"); 

// Add Item 
session.Save(new Item { Description = "Electronics", 
         Children = { 
           new Item { Description = "PS2" }, 
           new Item { Description = "XBox" } 
         }}); 
// Get Item 
var items = 
      (from c in session.Linq<Item>() 
       where c.Parent == null 
       select c).ToList(); 
+0

當我設置我的數據庫等時,我應該如何在Fluently.Configure()配置中使用這種映射? – Marcus 2009-12-09 09:43:24

+0

我用覆寫它似乎工作。 – Marcus 2009-12-09 14:11:51