2010-11-05 1 views

ответ

2

Вот как вы можете применить NOLOCK: http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx

(цитирую для потомков, все права защищены мр Скоттом):

ProductsNewViewData viewData = new ProductsNewViewData(); 
using (var t = new TransactionScope(TransactionScopeOption.Required, 
    new TransactionOptions { 
     IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted 
    })) 
{ 
    viewData.Suppliers = northwind.Suppliers.ToList(); 
    viewData.Categories = northwind.Categories.ToList(); 
} 
1

Я НАСТОЯТЕЛЬНО рекомендую прочитать о режимах изоляции транзакций SQL Server перед использованием ReadUncommitted. Вот очень хорошо читал

http://blogs.msdn.com/b/davidlean/archive/2009/04/06/sql-server-nolock-hint-other-poor-ideas.aspx

Во многих случаях уровень ReadSnapshot должно хватить. Также, если Вы действительно нуждаетесь в этом Вы можете установить уровень изоляции транзакций по умолчанию для базы данных с помощью

Set Transaction Isolation Level --levelHere 

Других хорошие идей включают упаковки своего контекста в обертке, который инкапсулирует каждый вызов с использованием требуемого уровня изоляции. (возможно, вам нужно nolock 95% времени и сериализуемое 5% времени). Это может быть сделано с помощью использования методов расширения, или обычных методов, с помощью кода, как:

viewData.Categories = northwind.Categories.AsReadCommited().ToList(); 

Который берет свой IQueryable и делает трюк, упомянутые Робами.

Надеюсь, это поможет Luke

Смежные вопросы