/ / Plusieurs instructions de mise à jour dans une transaction dans Entity Framework - asp.net-mvc-3, c # -4.0, entity-framework-4.1

De nombreuses instructions de mise à jour dans une transaction dans Entity Framework - asp.net-mvc-3, c # -4.0, entity-framework-4.1

J'ai besoin de mettre à jour plusieurs instructions de mise à jour, mais toutes doivent fonctionner sur l'automicité, c'est-à-dire mettre à jour tout ou rien.

sur internet et dans certains autres si questions que j'aitrouvé comment utiliser Transaction mais je n'ai "trouvé aucun d'entre eux disant de mettre à jour des instructions multiples en une transaction. Voir ci-dessous trois déclarations de mises à jour, ne fonctionnant pas actuellement sous transaction

/// this are my update calls.
var report = reportRepository.Update(reportModel);
var book = bookRepository.Update(bookModel);
var mobile = mobileRepository.Update(mobileModel);

// each Update method for all repository will looks like
public returnModel Update(someModel model)
{
// assign values from model to entity
Context.ObjectStateManager.ChangeObjectState(entity,System.Data.EntityState.Modified)
Context.SaveChanges();
}

Réponses:

4 pour la réponse № 1

Vous pouvez envelopper les mises à jour dans un TransactionScope:

using (TransactionScope transaction = new TransactionScope())
{
var report = reportRepository.Update(reportModel);
var book = bookRepository.Update(bookModel);
var mobile = mobileRepository.Update(mobileModel);
...
transaction.Complete();
}

1 pour la réponse № 2

Comme Darin l’a mentionné, utilisez unLa méthode préférée consiste à faire en sorte que vos référentiels appartiennent à une interface IUnitOfWork. L'appel de mise à jour définit simplement l'état sur modifié et SaveChanges se produit à l'extérieur de votre référentiel pour enregistrer toutes les modifications en même temps. Cela devrait se produire automatiquement dans une transaction.

Vous appelez donc toutes vos mises à jour, puis unitOfWork.SaveChanges où votre unité de travail personnalisée contient une référence à votre contexte et implémente une méthode définie dans IUnitOfWork appelée Save ().


0 pour la réponse № 3

En gros, vous devez le gérer via TransactionScope Class. Vous pouvez ainsi configurer plusieurs mises à jour d'un modèle, puis utiliser Transaction.Complete pour enregistrer vos données dans une transaction.

Vérifiez s'il vous plaît Mise à jour de plusieurs objets dans une transaction unique dans une structure d'entité pour plus de détails.