【问题标题】:How to determine if nHibernate object changed如何确定 nHibernate 对象是否更改
【发布时间】:2010-06-29 15:36:21
【问题描述】:

这可能是一个愚蠢的问题,但我仍在努力解决 nHibernate。

据我使用该软件可以看出,nHibernate 需要您做一些额外的处理才能正确保存更改。

假设我有一个对象 X,它可以包含许多对象 Y。我将创建一个具有 2 个 Y 的 X,每个 Y 都有自己的属性。然后我决定要更新 X。我要添加一个新的 Y,并更改一个现有的 Y。

所以我使用它的 ID 加载我的对象 X。然后我遍历我正在添加的 Y,将它们添加到 X 并使用更新语句保存批次。

如果您这样做,您会发现“旧”Y 在数据库中成为孤立对象。当我想到它时,这正是我所期望的——毕竟我还没有摆脱那些对象,我只是创建了一些新对象。

所以有两种方法来看待这个问题。要么我应该删除所有 Y 数据然后重新创建它,要么我应该能够向 nHibernate 标记我正在做的是一个更改,它应该更新现有对象而不是创建新对象.麻烦的是,我不确定哪种方法是“正确的”或如何最好地做到这一点 - 前者似乎效率极低,而后者意味着设置大量“更改”的标志和非常繁琐的代码。

所以我很确定一定有一个更简单的解决方案,我在愚蠢中错过了。有人可以指出最好的方法以及如何在 nHibernate 中最好地处理它......如果这个问题有任何意义的话:)

干杯, 马特

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    您可能有映射或使用问题。

    正确配置,你的用法应该是这样的:

    using (var session = sessionFactory.OpenSession())
    using (var tx = session.BeginTransaction())
    {
        var x = session.Get<X>(theId);
        x.Ys[0].SomeProperty = theNewValue;
        x.Ys.Add(theNewY);
        tx.Commit();
    }
    

    您应该发布有关实际类、映射和用法的更多详细信息。

    另外,我建议您完整阅读文档:http://nhibernate.info/doc/nh/en/index.html。只需几个小时,就可以省去很多天的挫败感。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2020-08-31
      • 2012-07-09
      相关资源
      最近更新 更多