Nolock默认为每个EF4请求创建一个ObjectContext

时间:2011-04-26 02:15:48

标签: 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;
  SqlCommand cmd = new SqlCommand("set transaction isolation level read uncommitted",con);
  cmd.ExecuteNonQuery();

  return db;
}

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

1 个答案:

答案 0 :(得分:0)

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

另一个副作用是读取uncommited隔离级别本身,这是非常危险的,因为它允许读取未经通信的事务数据。

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