NHibernate的。当我调用save(实体)时,它将我的所有实体保存更改为DB

时间:2015-04-21 20:02:23

标签: vb.net hibernate nhibernate save

我有一个vb.net应用程序,允许用户更改太多对象的属性,但他们可以决定保存什么或者只是保存它们。我的问题是,当我更改几个对象的属性并使用此代码保存其中一个时:

Public Sub Add(ByRef entity As T) Implements Interfaces.ICrud(Of T).Add
     Dim session As ISession = _conection.GetSesion()
     Dim transaction As ITransaction = sesion.BeginTransaction()
     session.Save(entity)
     transaction.Commit()     
End Sub

其他对象也会继续对数据库进行更改,并且我没有使用其中任何一个调用save。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

NHibernate的ISession维护与此会话关联的对象的身份映射(加载,添加等)。这个概念称为一级缓存。

即使发生了冲洗,也会保存与会话关联的所有对象。

答案 1 :(得分:1)

hazzik是对的。

如果更改了(变脏),Flush将从关联实体调用更新。我不确定是否是最佳选择,但您可以在所有不需要更新的对象上使用session.Evict(entity)来避免这种情况。

详细了解脏对象herehere