Как я могу заставить Entity Framework 1.0 использовать подсказку nolock при доступе к определенной сущности - PullRequest
3 голосов
/ 31 марта 2011

Я хотел бы получить доступ к сущности (называемой «Документ»), которая сопоставлена ​​с таблицей (называемой «Документ»), используя Entity Framework 1.0 , но очень важно, чтобы эта таблица не блокировалась при чтении данных .

Существуют статьи как онлайн , так и stackoverflow , в которых предлагается использовать для этого объем транзакции. Но я изначально не чувствую себя комфортно при создании транзакции для чтения.

Поэтому мой вопрос:

  1. Как я могу заставить платформу сущностей использовать подсказку nolock при создании оператора SQL для этой сущности, не указывая на хранимую процедуру, когда запрос направлен на SQL Server 2008?
  2. Если это невозможно, существуют ли реальные проблемы с использованием области транзакции для чтения, или я просто слишком осторожен?

1 Ответ

2 голосов
/ 31 марта 2011

Вы не можете заставить EF использовать подсказку NOLOCK, пока не напишите свой собственный провайдер инфраструктуры сущностей, где вы будете контролировать создание всех операторов SQL.Если вы хотите попробовать , проверьте эти упаковщики провайдера, которые можно использовать для упаковки существующих EF-провайдеров.Но все же это потребует анализа и изменения уже созданных операторов SQL, что может быть довольно сложной задачей с большим влиянием на производительность.

Насколько я понимаю, каждый оператор выполняется в своей собственной транзакции.Это причина, почему блокировка вызывает проблемы.Заключение операторов в TransactionScope с более низким уровнем изоляции просто перенастраивает неявную транзакцию.Но имейте в виду, что незафиксированные чтения также называются грязными чтениями - вы можете получить незафиксированные данные.

...