我有一个看起来像这样的简单类......
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 :(得分: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; }