/ / Viele Update-Anweisungen in einer Transaktion in Entity Framework - asp.net-mvc-3, c # -4.0, Entity-Framework-4.1

Viele Update-Anweisungen in einer Transaktion in Entity Framework - asp.net-mvc-3, c # -4.0, Entity-Framework-4.1

Ich muss mehr als eine Update-Anweisungen zu aktualisieren, aber alle sollten auf Automicity arbeiten, d. H. Alle oder keine aktualisieren.

im Internet und in anderen SO Fragen, die ich habeIch habe festgestellt, wie man Transaction benutzt, aber ich habe nicht gefunden, dass einige von ihnen sagen, dass sie mehrere Anweisungen in einer Transaktion aktualisieren sollen. Siehe unten drei Update-Anweisungen, die momentan nicht unter Transaktion ausgeführt werden

/// 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();
}

Antworten:

4 für die Antwort № 1

Sie könnten die Updates in ein Transaktions-Scope:

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

1 für die Antwort № 2

Wie Darin erwähnt, verwende einen Transaktionsumfang oder meineDie bevorzugte Methode besteht darin, dass Ihre Repositorys zu einer IUnitOfWork-Schnittstelle gehören. Beim Aufrufen von update wird der Status einfach geändert und SaveChanges geschieht außerhalb des Repositorys, um alle Änderungen gleichzeitig zu speichern. Dies sollte automatisch innerhalb einer Transaktion geschehen.

Also rufen Sie all Ihre Updates und dann unitOfWork.SaveChanges auf, wobei Ihre benutzerdefinierte Unit of Work-Klasse einen Verweis auf Ihren Kontext enthält und implementiert eine in IUnitOfWork definierte Methode namens Save ().


0 für die Antwort № 3

Im Grunde müssen Sie es über die TransactionScope-Klasse verwalten. Wenn Sie diese Option verwenden, können Sie mehrere Aktualisierungen für ein Model einrichten und anschließend Transaction.Complete verwenden, um Ihre Daten in einer Transaktion zu speichern.

Bitte prüfe Aktualisieren mehrerer Objekte in einer einzigen Transaktion im Entitätsframework für mehr Details.