【发布时间】:2017-01-06 02:21:53
【问题描述】:
我在我的 web 应用程序中看到一些奇怪的竞争条件,我怀疑这可能是由于实体框架以意想不到的方式处理读取锁。当我的应用程序向任何页面发出请求时,我会自动加载帐户模型,然后在请求的生命周期内将其存储在我的 DbContext 中。一些网页需要锁定帐户数据库行,这样我就可以安全地进行一些其他操作而无需竞争条件。这就是我现在的做法......
//... code that begins the request and loads the account into context.
// Some pages may run code that looks something like this.
using(var tran = existingCtx.Database.BeginTransaction(IsolationLevel.RepeatableRead))
{
// Lock customer.
var act = ctx.Accounts.Find(purchaseFor.ID);
if (act == null)
throw new RecordNotFoundException("Unable to find specified customer.");
DoStuffRelyingOnLock();
Commit();
}
调用是否会找到 Find(purchaseFor.ID) LOCK 数据库中的帐户行,即使它已经加载到上下文中?
【问题讨论】:
标签: c# sql sql-server entity-framework