在Nhibernate中更新时定义WHERE子句

时间:2014-04-16 11:19:05

标签: .net nhibernate

我数据库中的每个表都有IsDeleted列。我不想更新已删除的行。当用户更新某行时,我想添加额外的WHERE子句。所以我的SQL语句将如下所示:

UPDATE ... WHERE Id=1 AND IsDeleted=0

这样我就可以消除在一个事务中删除行并在另一个事务中更新行的情况。

First transaction             Second transaction

Begin transaction             Begin transaction
Read entity1 (IsDeleted==0)   Read entity1 (IsDeleted==0)
Update entity1.IsDeleted=1    
Commit
                              Update entity1.Name="new name" 
                              (should update 0 rows!!!)

我需要一种方法来使用一些常见的NHibernate方法,如Interceptor或Listener或其他一些NH功能。

1 个答案:

答案 0 :(得分:0)

如果是我,我会映射IsDeleted列,当我选择要修改的初始实体时,我会排除IsDeleted = 1的位置。然后我会正常进行更新。

通常,您应该通过主键更新nhibernate实体,而不是进行批量更新。