我正在为网站顶部菜单结构创建模型 -
我有一个 MenuObject 模型:
public class MenuObject
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual List<MenuObject> Children { get; set; }
}
和一个映射:
public mapMenu()
{
Id(x => x.Id)
.Not.Nullable();
Map(x => x.Title)
.Not.Nullable();
HasMany<MenuObject>(x => x.Children)
.AsList();
}
基本上我希望能够创建一个“顶级”菜单项,然后向其中添加一些子项 - 在数据库术语中,应该有一个 ParentId 字段,其中包含父菜单项的 ID(如果有的话 - 这可能是 null )
我正在努力弄清楚应该如何在我的对象模型中定义它。另外,一旦我配置了这个,我将如何拯救孩子?会不会是这样的
public void InsertChild(MenuObject parent, MenuObject child)
{
parent.Children.add(child)
session.SAve(parent)
.....
}
还是我必须独立保存孩子并将其明确链接到父母?
编辑* ** * *
谢谢 - 所以现在我的模型中有以下内容:
public virtual MenuObject Parent { get; set; }
public virtual List<MenuObject> Children { get; set; }
这在映射中:
HasMany(x => x.Children)
.AsList()
.Inverse()
.Cascade.All()
.KeyColumn("ParentId");
References(x => x.Parent, "ParentId");
我现在可以通过以下方式将子项添加到父项:
oChild.Parent = oParent;
session.SaveOrUpdate(oParent);
session.Save(oChild);
transaction.Commit();
我想我赢了!这是最好的方法吗?谢谢gdoron