如何确定nHibernate对象是否发生了变化

时间:2010-06-29 15:36:22

标签: nhibernate

可能是一个愚蠢的问题,但我仍然试图围绕nHibernate。

据我所知,使用该软件时,nHibernate要求您进行一些额外处理以正确保存更改。

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

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

如果你这样做,你会发现“旧”的Y在数据库中变成了孤儿。当我想到它时,正是我期望发生的事情 - 毕竟我还没有摆脱那些对象,我刚刚创造了一些新的东西。

所以有两种方法来看待这个。要么我应该删除所有的Y数据,然后重新创建它,或者我应该能够标记为nHibernate,我正在做的是一个改变,它应该更新现有的对象,而不是创建新的对象。麻烦的是,我不确定哪种方法是“正确的”或者最好的方法 - 前者看起来非常低效,后者意味着设置了很多“改变”的标志和非常繁琐的代码。

所以我很确定必须有一个更简单的解决方案,我在我的愚蠢中缺少。有人能指出我最好的方法以及如何在nHibernate中最好地处理它......那就是问题是否有任何意义:)

干杯, 马特

1 个答案:

答案 0 :(得分: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。只需几个小时,这将为您节省多天的挫折感。