Mögliche Duplizieren zu sperren:
Entity Framework with NOLOCKWie Entity Framework zwingen die Datenbank nicht
Ich verwende EF4 und .Net 4 zu laden einige XML aus einer Datei in eine Datenbank .
Ich habe eine Klasse die Wraps um den ObjectContext und hat Methoden, die die Marshalled-Objekte aus der XML-Datei zu den verschiedenen EntityCollections hinzufügen, die meine Tabellen darstellen.
Jede XML-Datei enthält durchschnittlich etwa 200.000 Objekte. Die Wrapper-Klasse erstellt den ObjectContext on construction und speichert den Verweis in einer lokalen privaten Klassenvariablen, die dann von den Methoden verwendet wird.
Als ich fertig haben die Entitäten zu schaffen Ich nenne:
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
Dies schafft eine Transaktion auf dem Server, der als pro EntityFramework Design. Diese Transaktion schließt jedoch meine Datenbank vollständig ab, selbst wenn Tabellen nicht hinzugefügt werden.
Ich habe verschiedene Dinge ausprobiert, um diese einschließlich Verpackung speichern Sie die Änderungen in einer Transaction so zu versuchen und zu erhalten:
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress,
new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
entities.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
transaction.Complete();
}
ich auch die Transaction versucht habe, zu schaffen, bevor das Object in einem Versuch, die Schaffung des zugrunde liegenden zu beeinflussen Transaktion wird während SaveChanges verwendet.
Idealerweise würde ich mehrere Dateien gleichzeitig laden wollen, aber dies ist unmöglich, wenn die Datenbank während der Speicheränderungen gesperrt ist.
Kennt jemand eine Arbeit um dieses Problem? Gibt es einen Weg, um den EntityFramework zu zwingen, keine Transaktion zu verwenden?
Vielen Dank für jede Hilfe im Voraus.
James
Ich denke, das Problem hier ist, dass Sie TransactionScopeOption.Supress verwenden. Versuchen Sie es mit Erforderlich. –