8

Ich möchte Startzeit in EF6 reduzieren, indem Sie das DbCompiledModel auf Datenträger zwischenspeichern.EF6-Code zuerst: Wie DbCompiledModel aus EDMX-Datei beim Start laden?

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

EdmxWriter.WriteEdmx(myDbContext, XmlWriter.Create(@"C:\temp\blah.xml")) 

Und es ist einfach, eine DbCompiledModel zum DbContext weitergeben müssen:

var db = new DbContext(connectionString, myDbCompiledModel) 

scheint es jedoch keine Möglichkeit zu sein, um die EDMX-Datei von der Festplatte in ein DbCompiledModel zu lesen! Wie kann ich das machen?

Hinweis, dass ich erfolgreich die Lösung mit dem EdmxReader Werkzeug in diesem implementiert verzweigte Version von EF6:

https://github.com/davidroth/entityframework/tree/DbModelStore 

Allerdings ist ich nur ungern eine Filiale Version in einer Produktionsumgebung zu 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 erhalten und in ein DbCompiledModel konvertieren?

Antwort

1

Ich habe getestet, ob ich es durch Serialisierung des DbCompiledModel zum Laufen bringen konnte.

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

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

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

modelBuilder.Build().Compile() 

Etwas vereinfacht, wie Sie einige Argumente

2) zur Verfügung stellen sollte, dass man serialisiert. Für die Arbeit mit privaten Mitgliedern versucht bei JSON.Net: Force serialization of all private fields and all fields in sub-classes oder versucht, sucht die BinaryFormatter Why is the BinaryFormatter serializing private members and not the XMLSerializer or the SoapFormatter ?

3), dass

4) Lesen Sie die Datei von der Festplatte auf der Festplatte speichern zu verwenden und Deserialize es zu einem neuen DbCompiledModel

+0

Brendan, Mikael war nett genug, um die Idee zu testen, die ich dir per E-Mail geschickt habe, nachdem ich es mit ihm geteilt habe. Lassen Sie uns wissen, ob dies der Fall ist! –

+0

Mikael, danke für die Antwort auf diese Frage. Ich habe versucht, das DbCompiledModel mit BinaryFormatter und JSON.Net mit verschiedenen Einstellungen zu serialisieren, aber lief auf selbstreferenzierende und non [Serializable] Probleme. Ich habe eine separate Frage mit den Details hier begonnen. Kannst du Licht abstrahlen und kannst du es überhaupt serialisieren? http://stackoverflow.com/questions/32109897/how-can-i-serialize-a-dbcompiledmodel-from-ef6 –