Comment utiliser les transactions avec Entity Framework?
Lorsque vous avez un code comme ceci:
Something something = new Something();
BlahEntities b = new BlahEntities()
b.AddToSomethingSet(something);
b.SaveChanges();
comment courir que plus de l'intérieur d'une transaction?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez placer votre code à l'intérieur d'une étendue de Transaction
TransactionScope est dans le Système.Les opérations de noms qui est situé dans l'assemblée du même nom (dont vous pouvez avoir besoin d'ajouter manuellement à votre projet).
ObjectContext a une propriété de la connexion que vous pouvez utiliser pour gérer les transactions.
Dans le cas d'une exception, la transaction sera annulée. Parce que l'appel à BeginTransaction (), qui exige et ouvrir une connexion, il est logique de placer l'appel BeginTransaction éventuellement dans une méthode d'extension.
Un scénario où je crois que cette approche pourrait être utile au cours de TransactionScope, c'est quand vous avez accès à deux sources de données, et seulement besoin de contrôle de transaction sur l'une des connexions. Je pense que dans ce cas, la TransactionScope fera la promotion d'une transaction distribuée qui pourrait ne pas être nécessaire.
context.Connection.BeginTransaction
.Je sais que pour LINQ to SQL, le contexte de données permettra de créer une transaction pour SubmitChanges() si il n'y a aucune ambiante transaction (TransactionScope est une "ambiance" de la transaction). Je n'ai pas vu cette documenté pour LINQ to entities, mais j'ai vu le comportement de suggérer que c'est vrai pour Entity Framework ainsi.
Donc, tant que vous utilisez un SubmitChanges() (L2SQL) ou SaveChanges() (Linq to entities) pour tous les changements liés à l', vous devriez être OK sans l'aide de TransactionScope. Vous avez besoin d'un TransactionScope quand
J'ai eu du mal avec imbriqué TransactionScopes. Ils sont censés travailler, et simple des cas de test de travail, mais quand je rentre dans le code de production, la "intérieure" de la transaction semble être le même objet que la transaction externe. Les symptômes comprennent les erreurs qui sont soit "transaction validée, vous ne pouvez pas utiliser cette transaction plus" ou "objet de la transaction a déjà été éliminés". Les erreurs se produisent à l'extérieur de transaction après l'intérieure de la transaction a fait son travail.
Trouver le lien ci-dessous pour une explication détaillée https://msdn.microsoft.com/en-us/data/dn456843.aspx
Dans toutes les versions de Entity Framework, chaque fois que vous exécutez SaveChanges() pour insérer, mettre à jour ou supprimer dans la base de données du cadre envelopper cette opération dans une transaction. Cette opération ne dure assez longtemps à l'exécution de l'opération, puis se termine. Lors de l'exécution d'une autre opération de ce type, une nouvelle transaction est démarrée.
Pour les plus récents Entity Framework version: 6.0 +
Lire La Suite Ici: EntityFramework et de Transaction