Gentili,
ritorno su questo problema che mi sta creando forti mal di testa, il cliente giustamente vuole una risposta.
Da quello che ho capito è Entity Framework (.Net Core 3.1) che blocca l'accesso alle tabelle su cui sta scrivendo dopo aver aperto la transaction, se infatti evito di usarla non mi blocca l'accesso.
Io faccio così:
// Per ogni ordine nella tabella OrdiniClientiDaCrm
await using EfContext dbCtx = new EfContext(configurazione.ConnessioneDatabase); // Efcontext è il dbContext EF
await using var transaction = await dbCtx.Database.BeginTransactionAsync();
//inserisco l'ordine nella tabella ordini_clienti con una stored_procedure
.......
//per ogni riga di acquisto relativo all'ordine leggo nella tabella OrdiniClientiDaCrmSotto
//inserisco le righe nella tabella ordini_clienti_sotto con una stored_procedure
.......
// se tutto va bene
await dbCtx.SaveChangesAsync();
await transaction.CommitAsync();
So che non è il metodo più veloce ed efficiente creare per ogni ordine il context e la transaction ma volevo essere il più conservativo possibile perché si tratta di un servizio e l'inserimento degli ordini e delle relative righe viene fatto tramite stored procedure, e non mi sembra che EF tenga il tracking delle stesse come nell'inserimento usando le relative entità.
La mia paura è che venga inserito solo l'ordine magari senza le righe o solo con parte delle righe.
Sono preso un po' male, accetto consigli.
Grazie in anticipo a chi mi risponderà.
Lucius