想象一下,我有一个由NHibernate管理的父/子关系。
我从MVC回发中收到一个编辑其属性的父对象;我想只保存父数据库而不必从数据库中加载子项。
在保存时,Parent有一个为null的Children属性(因为它尚未加载;但是,该父级的数据库中有有效的子级)。
当我保存修改后的Parent(ID = 100)时,NHibernate发出“SET Child.ParentId = NULL WHERE Child.ParentId = 100”语句。我不希望这发生,因为可能有有效的孩子。我不应该在保存之前从数据库中加载它们以防止它们成为孤儿。
流畅的映射看起来像这样(真正的实体名称为此帖子通用化):
public ParentMapping()
{
Table("Parent");
Id(x => x.Id).Column("Id").GeneratedBy.Identity();
Map(x => x.ParentProperty1).Column("ParentProperty1").Not.Nullable();
HasMany(x => x.Children).Cascade.None();
}
public ChildMapping()
{
Table("Children");
Id(x => x.Id).Column("Id").GeneratedBy.Identity();
Map(x => x.ChildProperty1).Column("ChildProperty1").Not.Nullable();
References(x => x.Parent).Column("Parent_Id").Not.Nullable().Fetch.Select();
}
总结一下,我想保存从早期的ISession中检索的更新的Parent实例(并传递给浏览器并通过MVC模型注释);它的Children属性为null,但实际上它在数据库中有很多孩子。我不希望NHibernate向Children表发出任何修改语句。
我已经尝试过Cascade.None()和LazyLoad(),希望这会让NHibernate表现出不同的行为,但没有运气。
任何见解都将受到赞赏。谢谢!
杰夫
答案 0 :(得分:0)
你必须指定Inverse()才能告诉nhibernate不要担心集合的这一面