【发布时间】:2011-03-21 11:37:09
【问题描述】:
保存新对象时如何检查重复项?
场景:
- 通过某些查询检查重复项 -> 当没有重复项执行保存时
不好,因为在 check 和 save 之间有足够的时间其他用户可以插入新的具有相同数据的对象(用户活跃度高)。
我应该在保存时检查异常还是什么?
【问题讨论】:
-
试试类和属性级别的乐观锁属性。我不确定它会影响插入。
标签: nhibernate duplicates unique
保存新对象时如何检查重复项?
场景:
不好,因为在 check 和 save 之间有足够的时间其他用户可以插入新的具有相同数据的对象(用户活跃度高)。
我应该在保存时检查异常还是什么?
【问题讨论】:
标签: nhibernate duplicates unique
using (var tx = session.BeginTransaction(IsolationLevel.Serializable))
{
bool alreadyExists = session.Query<MyEntity>()
.Any(x => x.UniqueProp = newEntity.UniqueProp);
if (!alreadyExists)
session.Save(newEntity)
tx.Commit();
}
Serializable 隔离级别保证没有人可以在查询和插入之间插入匹配的行。当然,缺点是由于范围锁而降低了并发性。
处理异常是另一种选择。
【讨论】: