J'ai le code suivant qui est dans une transaction. Je ne suis pas sûr où/quand je devrais commettre mon unité de travail. À cette fin, je n'ai pas mentionné quel type de Respoistory j'utilise - par exemple. Linq-To-Sql, Entity Framework 4, NHibernate, etc.À quelle ligne du code suivant devrais-je engager mon unité de travail?
Si quelqu'un sait où, peut-il s'il vous plaît expliquer pourquoi ils ont dit, où? (J'essaye de comprendre le modèle par l'exemple (s), par opposition à juste obtenir mon code pour fonctionner).
Voici ce que j'ai: -
using
(
TransactionScope transactionScope =
new TransactionScope
(
TransactionScopeOption.RequiresNew,
new TransactionOptions
{ IsolationLevel = IsolationLevel.ReadUncommitted }
)
)
{
_logEntryRepository.InsertOrUpdate(logEntry);
//_unitOfWork.Commit(); // Here, commit #1 ?
// Now, if this log entry was a NewConnection or an LostConnection,
// then we need to make sure we update the ConnectedClients.
if (logEntry.EventType == EventType.NewConnection)
{
_connectedClientRepository.Insert(
new ConnectedClient { LogEntryId = logEntry.LogEntryId });
//_unitOfWork.Commit(); // Here, commit #2 ?
}
// A (PB) BanKick does _NOT_ register a lost connection,
// so we need to make sure we handle those scenario's as a LostConnection.
if (logEntry.EventType == EventType.LostConnection ||
logEntry.EventType == EventType.BanKick)
{
_connectedClientRepository.Delete(
logEntry.ClientName, logEntry.ClientIpAndPort);
//_unitOfWork.Commit(); // Here, commit #3 ?
}
_unitOfWork.Commit(); // Here, commit #4 ?
transactionScope.Complete();
}
Je pense que vous êtes censé laisser l'unité de travail gérer les transactions ... –
Je suppose que votre UOW est au courant de TransactionScope. Il devrait savoir quand s'engager en fonction du moment où vous commettez la transaction. – Ryan
Cela dépend certainement de l'endroit où '_unitOfWork' est déclaré? –