Sto utilizzando EF 6 con un modello UoW. Ho più contesti definiti nella mia UoW poiché sto utilizzando i dati da più database. Tutto sembra funzionare correttamente eccetto la funzione CommitAsync che ho definito. Ecco il codice che ho:Utilizzo di modifiche di salvataggio asincrone su Entity Framework con più contesti
public async Task CommitAsync()
{
try
{
using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
if (_context1 != null)
await _context1.SaveChangesAsync();
if (_context2 != null)
await _context2.SaveChangesAsync();
scope.Complete();
}
}
catch (DbEntityValidationException ex)
{
//..
}
}
Quando ho eseguito questo codice estivo a entrambi i contesti che ricevo:
Il gestore delle transazioni ha disabilitato il proprio supporto per le transazioni remote/di rete. (Eccezione da HRESULT: 0x8004D024)
Attendere _context2.SaveChangesAsync(); è dove si verifica l'errore. Se rimuovo TransactionScope da questa funzione, il codice sembra funzionare senza errori. Sono riluttante a rimuovere l'ambito per più contesti.
Solo nel caso che ti aiuto, ecco il codice che uso per chiamare questa funzione:
state.Name = "Texas";
_uow.StateRepository.Update(state);
user.FirstName = "John";
_uow.UserRepository.Update(user);
await _uow.CommitAsync();
Grazie!
Non c'è niente di sbagliato nel codice è la config sulla casella che esegue il codice msdtc ha transazioni remote/di rete disabilitate. –
Perché si desidera utilizzare TransactionScope? Se il salvataggio fallisce, sarà comunque annullato. L'uso di TransactionScope porta solo a possibili deadlock. –
@JamieRees Sospetto che l'OP desideri che entrambi gli aggiornamenti funzionino o che entrambi falliscano ed evitare una situazione in cui uno ha funzionato, ma uno ha fallito. –