NHibernate发布不需要的孤立声明

时间:2010-09-19 15:47:43

标签: nhibernate

想象一下,我有一个由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表现出不同的行为,但没有运气。

任何见解都将受到赞赏。谢谢!

杰夫

1 个答案:

答案 0 :(得分:0)

你必须指定Inverse()才能告诉nhibernate不要担心集合的这一面