2011-03-31 1 views
3

Je souhaite accéder à une entité (appelée Document) mappée à une table (appelée Document) en utilisant Entity Framework 1.0 mais il est très important que cette La table n'est pas verrouillée lorsque les données sont lues.Comment utiliser Entity Framework 1.0 pour utiliser l'indicateur nolock lors de l'accès à une entité spécifique

Il existe des articles à la fois online, et stackoverflow qui suggèrent d'utiliser la portée de la transaction pour cela. Mais je ne me sens pas à l'aise de créer une transaction pour une lecture.

donc ma question est la suivante:

  1. Comment puis-je forcer le cadre de l'entité à utiliser l'indice nolock lors de la création de l'instruction SQL pour cette entité, sans indiquer à une procédure stockée, lorsque la requête est dirigée vers SQL Server 2008?
  2. Si cela n'est pas possible, est-ce qu'il y a de vrais problèmes avec l'utilisation d'une portée de transaction pour une lecture, ou suis-je juste trop prudent?

Répondre

2

Vous ne pouvez pas forcer EF à utiliser indicateur NOLOCK jusqu'à ce que vous écrivez votre fournisseur cadre d'entité personnalisée où vous contrôlerez la création de toutes instructions SQL. Si vous voulez essayer check these provider wrappers qui peuvent être utilisés pour emballer les fournisseurs EF existants. Mais encore, il faudrait analyser et modifier les instructions SQL déjà créées, ce qui peut être une tâche assez complexe avec un impact important sur les performances. Si je comprends bien, chaque déclaration s'exécute dans sa propre transaction. C'est la raison pour laquelle le verrouillage provoque des problèmes. Les instructions de wrapping dans TransactionScope avec un niveau d'isolation inférieur reconfigurent simplement la transaction implicite. Mais sachez que les lectures non validées sont également appelées lectures incorrectes - vous pouvez obtenir des données non-validées.

Questions connexes