EF6 code first: Wie lade ich DbCompiledModel aus der EDMX-Datei beim Start?

8

Ich möchte die Startzeit in EF6 reduzieren, indem ich das DbCompiledModel auf Festplatte zwischenspeichern.

Es ist einfach, die EDMX-Datei für einen DbContext zu schreiben:

%Vor%

Und es ist einfach, ein DbCompiledModel an den DbContext zu übergeben:

%Vor%

Es scheint jedoch keine Möglichkeit zu geben, die EDMX-Datei von der Festplatte in ein DbCompiledModel zu lesen! Wie kann ich das tun?

HINWEIS, dass ich die Lösung mit dem Tool EdmxReader in dieser verzweigten Version von EF6 erfolgreich implementiert habe:

%Vor%

Ich möchte jedoch keine Branchenversion in einer Produktionsumgebung verwenden. Ich habe versucht, das EdmxReader-Dienstprogramm aus diesem Zweig zu extrahieren, aber es beruht auf einem internen Konstruktor von DbCompiledModel, auf den ich nicht zugreifen kann.

Also, wie kann ich die EDMX-Datei von der Festplatte bekommen und in ein DbCompiledModel konvertieren?

    
Brendan Hill 07.01.2015, 10:02
quelle

1 Antwort

1

Ich habe getestet, ob ich es durch Serialisierung des DbCompiledModels zur Arbeit bringen könnte.

Sowohl das Abrufen von EF als auch das Bereitstellen eines neuen Kontexts funktioniert. Das Problem ist, dass alles privat ist, also wird es nichts serialisieren.

Wenn Sie den Serializer, den Sie verwenden, um private Mitglieder serialisieren können, sollte es ziemlich einfach sein.

1) Am Ende von OnModelCreating (wenn Sie zuerst Code verwenden) können Sie

tun %Vor%

Etwas vereinfacht, da Sie einige Argumente angeben sollten

2) Serialisieren Sie diesen. Für die Arbeit mit privaten Mitgliedern versuchen Sie JSON.Net: Erzwinge die Serialisierung aller privaten Felder und aller Felder in Unterklassen oder versuche den BinaryFormatter zu verwenden Warum serialisiert BinaryFormatter private Member und nicht den XMLSerializer oder den SoapFormatter?

3) Speichern Sie das auf der Festplatte

4) Lesen Sie die Datei von der Festplatte und deserialisieren Sie sie in ein neues DbCompiledModel

    
Mikael Eliasson 14.08.2015 09:16
quelle