如何在保存新对象时检查重复项?
情景:
不好,因为在 检查 和 保存 之间有足够的时间让其他用户可以插入新内容具有相同数据的对象(用户的高活动度)。
我应该在保存时检查异常还是什么?
答案 0 :(得分:0)
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
隔离级别保证没有人可以在查询和插入之间插入匹配的行。当然,由于范围锁定,缺点是降低了并发性。
处理异常是另一种选择。