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

Mar*_*cus 5 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>();
    }
}
Run Code Online (Sandbox Code Playgroud)

...其中Id是主键,ParentId是外键.当我运行此代码时,我得到无效的对象名称'ItemToItem'.例外,我无法弄清楚出了什么问题?我似乎NHibernate试图从名为ItemToItem的表中选择或类似的东西?

ash*_*raf 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();   
Run Code Online (Sandbox Code Playgroud)


Jef*_*ker 0

是的。流利的 nhibernate 将此视为多对多关系。我完全不知道如何建立你想要的关系类型。您可能至少想设置一个成员:

public virtual Item Parent{ get; set; }
Run Code Online (Sandbox Code Playgroud)