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"?

28
demandé sur Ladislav Mrnka 2011-04-14 04:09:35

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

38
répondu Ladislav Mrnka 2013-10-30 10:16:53

Par défaut, le système.L'infrastructure de Transactions crée des transactions sérialisables.

4
répondu Kayode Leonard 2011-11-25 01:58:17

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.

0
répondu grahamesd 2017-09-05 11:53:28