Entity framework Nolock作为默认值,用于为EF4的每个请求创建一个ObjectContext

Entity framework Nolock作为默认值,用于为EF4的每个请求创建一个ObjectContext,entity-framework,asp.net-mvc-3,transactions,entity,nolock,Entity Framework,Asp.net Mvc 3,Transactions,Entity,Nolock,此代码是否有任何副作用: ///This code runs per request public static MyObjectContext CreateEntity() { MyObjectContext db=new MyObjectContext(); db.Connection.Open(); var con = (SqlConnection)((EntityConnection)hi.Connection).StoreConnection; SqlComman

此代码是否有任何副作用:


///This code runs per request 
public static MyObjectContext CreateEntity()
{
  MyObjectContext db=new MyObjectContext();

  db.Connection.Open();
  var con = (SqlConnection)((EntityConnection)hi.Connection).StoreConnection;
  SqlCommand cmd = new SqlCommand("set transaction isolation level read uncommitted",con);
  cmd.ExecuteNonQuery();

  return db;
}

现在“db”实例将运行ReadUncommitted模式?

副作用是您必须手动处理连接,并且连接在其整个生命周期内由上下文保持。它也会在上下文的整个生命周期内保持打开状态,这可能会降低效率

另一个副作用是读取未限制的隔离级别本身,使用它非常危险,因为它允许读取未限制的事务数据


你为什么需要这个?默认情况下,EF使用数据库服务器的默认事务隔离模式。对于SQL server,它是读取提交的。默认情况下,EF也不会锁定记录,因为每个读取操作都只是事务的一部分,其持续时间仅限于该读取。只有
SaveChanges
将事务用于多个数据库命令。

我有一个表(用户通知)。该表有很重的插入负载。那么在访问该表时使用read Uncommitted only如何呢?我已经为同样的问题挣扎了好几个小时了。我们的DB团队坚持将隔离级别设置为“未提交”。我正在使用store命令在上下文级别执行此操作。但是,后续查询失败,导致以下错误。”您只能在读取提交或可重复读取隔离级别中指定READPAST锁。“某些查询默认使用READPAST锁,而我在探查器中没有看到该查询。有什么想法吗?原来其中一个观点有一段历史。哼!