保存时检查重复项

时间:2011-03-21 11:37:10

标签: nhibernate duplicates unique

如何在保存新对象时检查重复项?

情景:

  • 通过某些查询检查重复项 - >当没有重复项执行保存时

不好,因为在 检查 保存 之间有足够的时间让其他用户可以插入新内容具有相同数据的对象(用户的高活动度)。

我应该在保存时检查异常还是什么?

1 个答案:

答案 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隔离级别保证没有人可以在查询和插入之间插入匹配的行。当然,由于范围锁定,缺点是降低了并发性。

处理异常是另一种选择。