将 EF 用于MSSQL 2008
. 所以我把ReadUncommitted事务隔离级别,希望能解决,像这样,
前
using (MyEntities db = new MyEntities())
{
// large dataset
var data = from _Contact in db.Contact where _Contact.MemberId == 13 select _Contact;
for (var item in data)
item.Flag = 0;
// Probably db lock
db.SaveChanges();
}
后
using (var scope =
new TransactionScope(TransactionScopeOption.RequiresNew,
new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
using (MyEntities db = new MyEntities())
{
// large dataset but with NOLOCK
var data = from _Contact in db.Contact where _Contact.MemberId == 13 select _Contact;
for (var item in data)
item.Flag = 0;
// Try avoid db lock
db.SaveChanges();
}
}
我们SQL profiler
用来追踪。但是,按顺序获取这些脚本,(期望第一个脚本未提交读取。)
审核登录
set transaction isolation level read committed
SP:StmtStarting
SELECT
[Extent1].[ContactId] AS [ContactId],
[Extent1].[MemberId] AS [MemberId],
FROM [dbo].[Contact] AS [Extent1]
WHERE [Extent1].[MemberId] = @p__linq__0
审核登录
set transaction isolation level read uncommitted
尽管我可以重新发送此请求并使其顺序正确(将显示read-uncommitted
以下请求,相同的SPID),但我想知道为什么它在 read-committed 命令之后发送 read-uncommitted 命令以及如何使用 EF 和TransactionScope进行修复?谢谢。