Sto ottenendo questo errore e non sono stato in grado di risolvere:
System.Data.SqlClient.SqlException: 'L'operazione di transazione non può essere eseguita perché ci sono richieste in sospeso che funzionano su questa transazione.'
Quello che sta succedendo è che una normale operazione di dati sta avvenendo come parte di un Controller Action.
Allo stesso tempo, c'è un filtro in esecuzione che registra l'azione su un database.
this._orderEntryContext.ServerLog.Add(serverLog);
return this._orderEntryContext.SaveChanges() > 0;
Questo è dove si verifica l'errore.
Quindi mi sembra che ci siano due SaveChange attivi nello stesso momento, e quindi la transazione si inceppa.
Non sai come risolvere. Entrambi utilizzano lo stesso contesto ottenuto tramite DI. Una soluzione alternativa era creare manualmente un secondo contesto, ma preferirei attenermi al modello DI. Ma non so come creare un secondo Db Context in DI, o anche se è una buona idea.
Forse dovrei usare SaveChangesAsync () su entrambe le chiamate per assicurarmi che non si calpestino l'un l'altro?
Risulta la risposta a questo è stato quello di rendere il contesto un servizio temporaneo:
services.AddDbContext<OrderEntryContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")), ServiceLifetime.Transient);
Quindi, ho cambiato tutti i repository per essere anche transitori:
services.AddTransient<AssociateRepository, AssociateRepository>();