Nolock по умолчанию для Create One ObjectContext для каждого запроса для EF4 - PullRequest
1 голос
/ 26 апреля 2011

Есть ли побочный эффект для этого кода:


///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 голосов
/ 26 апреля 2011

Побочным эффектом является то, что вы должны обрабатывать ваше соединение вручную, и что соединение удерживается контекстом в течение всего его срока службы. Он также остается открытым в течение всего времени жизни контекста, который может быть менее эффективным.

Другим побочным эффектом является чтение уровня незафиксированной изоляции, который довольно опасен для использования, поскольку позволяет читать незафиксированные данные транзакций.

Зачем тебе это? EF по умолчанию использует режим изоляции транзакций по умолчанию сервера базы данных. Для SQL-сервера это чтение совершено. EF также по умолчанию не удерживает блокировки на записях, потому что каждая операция чтения является только частью транзакции с продолжительностью только для этого чтения. Только SaveChanges использует транзакцию для нескольких команд базы данных.

...