Eventuali duplicati:
Entity Framework with NOLOCKCome forzare Entity Framework di non bloccare il database
sto usando EF4 e .Net 4 a caricare un po 'di XML da un file in un database .
Ho una classe che avvolge ObjectContext e ha metodi che aggiungono gli oggetti sottoposti a marshalling dal file XML alle varie EntityCollections che rappresentano le mie tabelle.
Ogni file XML contiene in media circa 200.000 oggetti, la classe wrapper crea ObjectContext sulla costruzione e memorizza il riferimento in una variabile di classe privata locale che viene quindi utilizzata dai metodi.
Quando avrò finito di creare le entità mi chiamano:
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
Questo crea una transazione sul server che è secondo il disegno EntityFramework. Tuttavia questa transazione blocca completamente il mio DB anche su tabelle che non vengono aggiunte.
ho provato varie cose per cercare di aggirare questo involucro tra cui salvare le modifiche in un TransactionScope come questo:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
transaction.Complete();
}
Inoltre ho provato a creare il TransactionScope prima di creare l'ObjectContext nel tentativo di influenzare il sottostante transazione utilizzata durante SaveChanges.
Idealmente, vorrei caricare più file contemporaneamente, ma questo sarà impossibile se il DB è bloccato durante le modifiche di salvataggio.
Qualcuno sa come risolvere questo problema? C'è via per forzare EntityFramework a non utilizzare una transazione?
Grazie per qualsiasi aiuto in anticipo.
James
Penso che il problema qui sia che stai usando TransactionScopeOption.Supress. Prova ad usare Required. –