Ich bin ein bisschen neu, wenn es zu Entity Framework 6 aus dem alten Stil von ADO.NET kommt, also ertragen Sie mich hier.
Ich versuche, ein neues WPF MVVM-Projekt und auch ein paar WinForms zu erstellen, die einfach direkt DBContext
ohne Datenbindung mit dem EF 6 verwenden.
Mit dem Visual Studio 2013-Entity-Framework-Assistenten habe ich einen Code erstellt, indem ich zuerst eine aktuelle Datenbank auf unserem Business-Server zurückentwickle. Ich habe dann die Datenmodellklassen vom Kontext
getrennt Dies ist der Code DbContext
:
Ich habe die Datenklassen in einem separaten Namespace getrennt, zum Beispiel:
%Vor%Die übrigen Klassen haben einen ähnlichen Stil, aber wenn Sie die Fremdschlüssel-Einschränkung verwenden, sieht das etwa so aus:
%Vor%denn in unserer kleinen Welt wird es sich um die Orden drehen.
Und die app.config:
%Vor%Also wenn ich das tue:
%Vor%Eine Ausnahme wird ausgelöst:
Der Kontext kann nicht verwendet werden, während das Modell erstellt wird. Dies Ausnahme kann ausgelöst werden, wenn der Kontext innerhalb der verwendet wird
OnModelCreating
Methode oder wenn auf die gleiche Kontextinstanz zugegriffen wird mehrere Threads gleichzeitig. Beachten Sie, dass Instanzmitglieder vonDbContext
und verwandte Klassen sind nicht garantiert threadsicher.
Ich werde hier verrückt und versuche herauszufinden, was ich tun kann, und ich habe gelesen, dass es vielleicht helfen könnte, eine Aufgabenfabrik zu erledigen. Wie kann ich dann die Daten von jedem Tisch abrufen? füllen Sie die Listen?
ODER gibt es eine andere Alternative oder eine Problemumgehung, die ich verwenden kann?
EDIT: Hier ist der FULL Stacktrace wie von Andez angefordert:
%Vor%Ich denke, es könnte mit der Erstellung des Fremdschlüssels in onModelCreating zu tun haben. Laut der Dokumentation , Die onMethodCreating-Methode "wird aufgerufen, wenn das Modell für einen abgeleiteten Kontext initialisiert wurde, aber bevor das Modell gesperrt und zum Initialisieren des Kontexts verwendet wurde."
Außerdem können Sie, wenn Sie EF6 verwenden, die Beziehung in Ihren Domänenobjekten deklarieren, anstatt die Beziehung selbst manuell deklarieren zu müssen. Ich sehe, dass Sie die Beziehungen bereits in Ihrem Modell deklariert haben. entferne das und schau was passiert. Siehe hier , um weitere Informationen zur Konfiguration zu erhalten zu vielen Beziehungen.
Es könnte sich um die Verbindungszeichenfolge oder ein anderes mit der Verbindung zusammenhängendes Problem handeln, z. B. die fehlende Datenbank oder die Authentifizierung.
Sie müssen möglicherweise auch die Datenbank aktualisieren.
Von der nugget-Paketmanagerkonsole:
%Vor%Entity Framework - Der Kontext kann nicht verwendet werden, während das Modell erstellt wird
Der Kontext kann nicht verwendet werden, während der Modell wird erstellt
Du hast gesagt, du wärst (neu) für das Entity-Framework, also solltest du vielleicht darauf hinweisen, dass DbContexts nicht geteilt und wiederverwendet werden sollen. Normalerweise sollten Sie einen DbContext innerhalb einer einzigen Arbeitseinheit erstellen, verwenden und entsorgen.
Mit anderen Worten, Sie sollten den DbContext nicht "teilen" (z. B. nur einen beim Start erstellen und ihn an mehreren Orten verwenden, usw.). Sie haben erwähnt, dass Sie einen "Thread-sicheren Wrapper" erstellen wollen - Sie sollten es definitiv nicht versuche nicht, von mehreren Threads darauf zuzugreifen (jede Operation hätte ihren eigenen DbContext)
Tags und Links .net c# entity-framework-6