实体框架 - 读取锁定记录

时间:2011-07-07 14:56:19

标签: .net entity-framework entity-framework-4 entity entity-relationship

我使用Entity Framework从不同的应用程序调用相同的数据库。但是,当一个应用程序正在读取/更新记录时,我不希望其他应用程序读取该数据。

我尝试使用以下示例代码;但是,他们仍然能够阅读记录。

任何建议或不同的方法都将受到高度赞赏!

using (Entities context = new Entities(ConnectionString))
{
    DBTable entity;

    do
    {
        entity = context.DBTable
            .Where(item => item.IsLock == false)
            .FirstOrDefault();

        if (entity != null)
        {
            // Map entity to class
            ......


            // Lock the record; it will be unlocked later by a calling method.
            entity.IsLock = true;
            context.SaveChanges();

            count++;
        }

    } while (entity != null && count < 100);
}

编辑:基本上,我读了一个记录并做了一些事情(有时需要很长时间)。然后使用成功/失败标志更新记录(如果失败,则可以再次执行此操作)。我不希望其他应用程序多次执行成功任务。

1 个答案:

答案 0 :(得分:5)

从评论转到答案:

如果您不介意使用SQL修复此问题,请创建存储过程。在存储过程中,在记录WITH UPDLOCK(see here for information on table hints)上执行SELECT。在SELECT之后,将记录更新为IsLock。这可以防止任何其他进程在检查/设置IsLock字段时读取数据。

希望有所帮助