8

Я хочу уменьшить время запуска в EF6, кэшируя DbCompiledModel на диск.EF6 code first: Как загрузить DbCompiledModel из файла EDMX при запуске?

Легко написать файл EDMX для DbContext:

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

И это легко пройти DbCompiledModel к DbContext:

var db = new DbContext(connectionString, myDbCompiledModel) 

Однако там, кажется, не будет каким-либо образом прочитать файл EDMX с диска в DbCompiledModel! Как я могу это сделать?

ВНИМАНИЕ, что я успешно реализовали решение, используя инструмент EdmxReader в этой разветвленной версии EF6:

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

Однако я не хотел бы использовать версию филиал в производственной среде. Я попытался извлечь утилиту EdmxReader из этой ветви, но он полагается на внутренний конструктор DbCompiledModel, к которому я не могу получить доступ.

Итак, как я могу получить файл EDMX с диска и преобразовать его в DbCompiledModel?

ответ

1

Я тестировал, могу ли я заставить его работать, сериализуя DbCompiledModel.

Как получить его от EF, так и предоставить его при создании нового контекстного произведения. Проблема в том, что все личное, поэтому ничего не будет сериализовать.

Если вы можете получить сериализатор, который вы используете для сериализации частных членов, это должно быть довольно просто.

1) В конце OnModelCreating (если вы используете код первой) вы можете сделать

modelBuilder.Build().Compile() 

слегка упрощена, как вы должны предоставить некоторые аргументы

2) сериализовать что один. Для работы с частными лицами, членами старается смотреть на JSON.Net: Force serialization of all private fields and all fields in sub-classes или попытаться использовать BinaryFormatter Why is the BinaryFormatter serializing private members and not the XMLSerializer or the SoapFormatter ?

3) Сохранение, что на диск

4) Считайте файл с диска и десериализацией его на новый DbCompiledModel

+0

Брендана, Микаэль был достаточно любезен, чтобы проверить идею, которую я отправил вам по электронной почте после того, как я поделился ею с ним. Сообщите нам, если это трюк! –

+0

Mikael, спасибо, что ответили на этот вопрос. Я попробовал сериализацию DbCompiledModel с использованием BinaryFormatter и JSON.Net с различными настройками, но столкнулся с проблемами самореференции и несамосеризуемыми. Я задал отдельный вопрос с деталями. Можете ли вы пролить свет и сможете ли вы его сериализовать? http://stackoverflow.com/questions/32109897/how-can-i-serialize-a-dbcompiledmodel-from-ef6 –