Fluent nHIbernated-在同一个表中有许多关系
我正在为网站顶部菜单结构创建一个模型- 我有一个MenuObject模型:Fluent nHIbernated-在同一个表中有许多关系,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent,Fluent Nhibernate Mapping,我正在为网站顶部菜单结构创建一个模型- 我有一个MenuObject模型: public class MenuObject { public virtual int Id { get; set; } public virtual string Title { get; set; } public virtual List<MenuObject> Children { get; set; } } 或者我必须独立地保存孩子,并将其明确地链接到家长 编辑*****
public class MenuObject
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual List<MenuObject> Children { get; set; }
}
或者我必须独立地保存孩子,并将其明确地链接到家长
编辑******
谢谢-现在我的模型中有以下内容:
public virtual MenuObject Parent { get; set; }
public virtual List<MenuObject> Children { get; set; }
现在,我可以通过以下方式将子项添加到父itms:
oChild.Parent = oParent;
session.SaveOrUpdate(oParent);
session.Save(oChild);
transaction.Commit();
我想我会赢的!这是最好的方法吗?谢谢你,格多伦
或者我必须独立地保存孩子,并将其明确地链接到家长
无论如何,如果不想得到异常,您必须将其“链接”到其父级…只有在映射中未指定
Cascade.save\All()
时,才能单独保存子级:
HasMany(x => x.Children)
.AsList()
.Inverse()
.Cascade.All()
.KeyColumn("ParentId");
References(x => x.Parent, "ParentId");
HasMany<MenuObject>(x => x.Children)
.AsList().Inverse.Cascade.All(); // Inverse will increase performance.
附加说明你不必写
Not.Nullable
在Id
上,这是默认值。我现在保存了它,但是如果我不同时保存父对象和子对象,它就不起作用了-你能看到问题吗?另外,我必须执行手动过程来加载包含子对象的父对象吗?该对象似乎不会加载当前的子对象sing oMenuObjects=session.CreateCriteria(typeof(MenuObject)).Add(Expression.Eq(“Active”,Active)).List();@user1162591.看起来您保存它的方式是正确的。因此,如果没有保存子项,它就不能工作,那么请保存它。您的CreateCriteria
中有什么活动,您希望实现什么?我的标准如下:oMenuObjects=session.CreateCriteria(typeof(MenuObject)).Add(Expression.Eq(“Active”,Active)).List();return oMenuObjects;
当我只有单个属性时,此查询工作正常-现在我有了集合属性(Children),查询不起作用。我需要在查询中显式填充集合吗?@user1162591。但是您在MenuObject实体中没有活动项。@user1162591。query
比Criteria
session.query()。其中(x=>x.Active==Active)。选择(x=>x.Children.ToList();
更多信息,请访问Ayende博客
oChild.Parent = oParent;
session.SaveOrUpdate(oParent);
session.Save(oChild);
transaction.Commit();
HasMany<MenuObject>(x => x.Children)
.AsList().Inverse.Cascade.All(); // Inverse will increase performance.
References(x => x.Parent);