流畅的NHibernate自动引用自我引用

时间:2009-10-10 13:30:16

标签: c# fluent-nhibernate

我有一个看起来像这样的简单类......

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的表中选择或类似的东西?

2 个答案:

答案 0 :(得分:8)

正确的自我参照方式

// 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();   

答案 1 :(得分:0)

是。流利的nhibernate认为这是一个很多的关系。我不知道如何创建你想要的关系类型。你可能至少想建立一个成员:

public virtual Item Parent{ get; set; }
相关问题