8

Desidero ridurre il tempo di avvio in EF6 inserendo nella cache DbCompiledModel sul disco.Codice EF6 prima: come caricare DbCompiledModel dal file EDMX all'avvio?

E 'facile scrivere il file EDMX per un DbContext:

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

Ed è facile passare un DbCompiledModel alla DbContext:

var db = new DbContext(connectionString, myDbCompiledModel) 

Tuttavia non sembra essere un modo leggere il file EDMX dal disco in un DbCompiledModel! Come posso fare questo?

NOTA che ho implementato con successo la soluzione utilizzando lo strumento EdmxReader in questa ramificata versione di EF6:

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

tuttavia sono riluttanti a utilizzare una versione di ramo in un ambiente di produzione. Ho provato a estrarre l'utility EdmxReader da questo ramo, ma si basa su un costruttore interno di DbCompiledModel a cui non posso accedere.

Quindi, come posso ottenere il file EDMX dal disco e convertirlo in un DbCompiledModel?

risposta

1

Ho provato se riuscivo a farlo funzionare serializzando DbCompiledModel.

Entrambe le ricevono da EF e le forniscono durante la creazione di un nuovo contesto. Il problema è che tutto è privato, quindi non serializzerà nulla.

Se è possibile ottenere il serializzatore utilizzato per serializzare membri privati, dovrebbe essere abbastanza semplice.

1) Alla fine del OnModelCreating (se si utilizza il codice prima) si può fare

modelBuilder.Build().Compile() 

leggermente semplificata, come è necessario fornire alcuni argomenti

2) serializzare che uno. Per il lavoro con i membri privati ​​prova a guardare JSON.Net: Force serialization of all private fields and all fields in sub-classes o provare a utilizzare il BinaryFormatter Why is the BinaryFormatter serializing private members and not the XMLSerializer or the SoapFormatter ?

3) Salvare che su disco

4) Leggere il file dal disco e deserializzare in una nuova DbCompiledModel

+0

Brendan, Mikael è stato così gentile da testare l'idea che ti ho mandato via email dopo averlo condiviso con lui. Facci sapere se questo fa il trucco! –

+0

Mikael, grazie per aver risposto a questa domanda. Ho provato a serializzare DbCompiledModel usando BinaryFormatter e JSON.Net con varie impostazioni, ma ho riscontrato problemi auto-referenziali e non [Serializable]. Ho iniziato una domanda separata con i dettagli qui. Puoi far luce e sei riuscito a serializzare? http://stackoverflow.com/questions/32109897/how-can-i-serialize-a-dbcompiledmodel-from-ef6 –