J'utilise Entity Framework 4.0. Maintenant, je dois restreindre l'accès à une table pendant que je la lis ou que j'écris dessus. Il s'agit probablement du niveau d'isolement des transactions.
Comment je fais ça?
Mise à jour
voici ce que j'ai
using (var db = new MyDb())
{
using (TransactionScope scope = new TransactionScope())
{
var item = db.MyItems.Single(x => x.Id == 5);
item.Price = 12;
db.SaveChanges();
scope.Complete();
}
}
Cependant, lorsque je mets un point d'arrêt sur une ligne à l'intérieur de using (TransactionScope scope
et lorsque je m'arrête là-bas, puis je vais dans Sql Server Management Studio et je fais une requête de sélection (ou même une mise à jour!) à partir d'une table qui utilise une transaction, je ne reçois pas d'erreur pour une raison quelconque. Mais pourquoi? Il ne doit pas me permettre de lire des données pendant l'exécution d'une transaction.
Par défaut, une transaction a un IsolationLevel de sérialisable. Sérialisable est le niveau le plus élevé. Cela nécessite que la transaction se termine avant que toute autre transaction ne soit autorisée à opérer sur les données.
Il a les restrictions suivantes:
Ceci est un excellent article de blog qui explique comment utiliser les transactions avec Entity Framework: exemples de portée des transactions Entity Framework
Dans Entity Framework 6, le IsolationLevel par défaut est remplacé par READ_COMMITTED_SNAPSHOT pour les bases de données créées à l'aide de Code First, ce qui permet potentiellement plus d'évolutivité et moins de blocages. Voir future spécification de EF 6