实体框架 - 悲观锁定

Cos*_*nea 4 sql-server entity-framework-4 ef-code-first

我想要做的基本上就是当你做类似的事情时NHibernate所做的事情:

var instance = session.Get<Customer>(id, LockMode.Upgrade);
Run Code Online (Sandbox Code Playgroud)

我需要锁定数据库中的实体行.为什么我需要那个?想象一下,工作流实例可以同时由多个角色(人或进程)更新.

我的约束不允许乐观锁定解决方案.

Lad*_*nka 6

EF对此没有支持.如果要通过查询锁定某些记录,则必须执行以下操作:

using (var scope = new TransactionScope(...))
{
    using (var context = new YourContext(...))
    {
        var customer = 
            context.ExecuteStoreQuery<Customer>("SELECT ... FROM Customers WITH (UPDLOCK) WHERE ...");

        // rest of your logic while record is locked

        scope.Complete();
    }
}
Run Code Online (Sandbox Code Playgroud)

或者context.Database.SqlQuery在DbContext API的情况下.