2010-11-05 17 views

Répondre

2

Voilà comment vous pouvez appliquer NOLOCK: http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx

(Citation pour la postérité, tous droits réservés par M. scott):

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

Je recommande vivement de lire sur les modes d'isolation des transactions SQL Server avant d'utiliser READUNCOMMITTED. Voilà une très bonne lecture

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

Dans de nombreux cas, le niveau ReadSnapshot devrait suffire. vous aussi si vous avez vraiment besoin, vous pouvez régler le niveau d'isolation des transactions par défaut de votre base de données en utilisant

Set Transaction Isolation Level --levelHere 

D'autres bonnes idées comprennent l'emballage Votre contexte dans un emballage qui encapsule chaque appel à l'aide exigea niveau d'isolation. (Peut-être que vous avez besoin de nolock 95% du temps et sérialisable 5% du temps). Il peut être fait en utilisant l'aide de méthodes d'extension, ou des méthodes normales par code comme:

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

qui prend votre IQueryable et fait le tour mentionné par Rob.

Espérons que ça aide Luke