Dej*_*jas 7 entity-framework entity-framework-4
假设我有一个跟踪文件下载次数的表,并通过EF将该表暴露给我的代码.下载文件时,我想将计数更新一次.起初,我写了这样的东西:
var fileRecord = (from r in context.Files where r.FileId == 3 select r).Single();
fileRecord.Count++;
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
但是当我检查这些语句生成的实际SQL时,我注意到增量不是发生在数据库端,而是发生在我的内存中.所以我的程序读取数据库中的计数器值(比如2003),执行计算(新值是2004),然后使用新的Count值2004显式更新行.显然,从并发角度来看,这是不安全的.
我希望查询最终看起来像:
UPDATE Files SET Count = Count + 1 WHERE FileId=3
Run Code Online (Sandbox Code Playgroud)
谁能建议我怎么做到这一点?我不想在读取之前锁定行,然后在更新之后解锁,因为我害怕阻止其他用户的读取(除非有人只为写入锁定行而不是块读取).
我还看了一下Entity SQL命令,但看起来Entity SQL不支持更新.
谢谢