Quel est le niveau d'isolement de transaction par défaut dans Entity Framework lorsque j'émet"SaveChanges ()"?
Quel est le niveau d'isolement de transaction par défaut dans Entity Framework lorsque j'émet"SaveChanges ()"? Je ne peux pas le trouver n'importe où. Doit - il être "sérialisable"?
3 réponses
SaveChanges
utilise l'implémentation de DbTransaction
pour le fournisseur de magasin actuel. Cela signifie que le niveau d'isolement de transaction par défaut est défini sur la valeur par défaut pour le serveur de base de données. Dans SQL Server, c'est READ COMMITTED
. Si vous voulez changer le niveau d'isolement, vous pouvez utiliser TransactionScope
. Vous pouvez également remplacer SaveChanges
dans votre contexte dérivé et envelopper base.SaveChanges()
dans la portée directement dans la méthode overriden.
public override void SaveChanges()
{
// Default isolation level for TransactionScope is Serializable
using (var scope = new TransactionScope())
{
base.SaveChanges();
scope.Complete();
}
}
Vous pouvez encore améliorer ce code pour vous permettre de passer le niveau d'isolement à SaveChanges
etc. Une fois que vous commencez à changer niveaux d'isolement vous devriez le faire de manière cohérente. Cela signifie que vous devez définir le niveau d'isolement chaque fois que vous souhaitez exécuter une transaction car le niveau d'isolement est configuré par connexion et les connexions sont réutilisées lors de l'utilisation du regroupement de connexions.
Edit: le niveau de transaction par défaut dans EF6 a changé en READ COMMITTED SNAPSHOT
Par défaut, le système.L'infrastructure de Transactions crée des transactions sérialisables.
Depuis EF 6, le niveau d'isolement par défaut pour une transaction SQL Server est READ COMMITTED. La référence est ici: Entity Framework travaillant avec les Transactions (EF6 et suivantes)
Pour les autres fournisseurs (même référence) "le niveau d'isolement de la transaction est quel que soit le niveau d'isolement que le fournisseur de base de données considère comme son paramètre par défaut". Vous devrez donc regarder la documentation de ce fournisseur.