Entity Framework 6 Ausnahme: "Der Kontext kann nicht verwendet werden, während das Modell erstellt wird"

8

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 :

%Vor%

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 von DbContext   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%     
Steve Brother 20.08.2015, 21:59
quelle

3 Antworten

0

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.

    
Ivan Peng 21.08.2015 01:51
quelle
0

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%

" Der Kontext kann nicht verwendet werden, während das Modell erstellt wird "Ausnahme mit ASP.NET Identity"

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

    
Charlie 02.04.2017 06:23
quelle
0

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)

    
Mark Sowul 08.07.2017 13:42
quelle

Tags und Links