2012-03-15 1 views
6

У меня есть проблема, которая вызывает потерю волос ...Как остановить EF (Code First) Проверка Для изменений схемы

У меня есть сборки проекта с помощью Code First (EF); все хорошо, и это работает как шарм, однако я не могу найти подходящий способ разрешить изменения в базе данных (через скрипты .sql) без приложения, бросающего истерику при запуске, потому что схема изменилась.

Я прочитал и прочитал эту проблему, я удалил таблицу EdmMetaData, чтобы не сравнивать хэш базы данных, но затем прочитал, что в EF произошла ошибка в том, что если она удалена, она по-прежнему считает, что схема (поскольку он не распознает недостающую таблицу, поэтому он сравнивает пустую строку!).

Кроме того, я попытался использовать Database.SetInitializer (null) в файле Global.asax, но это означает, что позже я не могу получить доступ к модели данных.

Все говорят об использовании опции уронить базы данных, если изменения схемы и т.д.

Это то, что я ищу:

Для EF/Code First, чтобы сделать ... НИЧЕГО! Сладкая ФА! Тупица!

... Если я изменил схему через внешнее приложение, я хочу, чтобы он полностью игнорировал изменения и просто ASSUME. Я применил соответствующие изменения модели для работы с этими изменениями базы данных, выполненными с помощью сценария .sql. Если я пропущу стол или стол, я приму свою глупость, и я ожидаю истерики, но, пока я не ошибаюсь, я хочу, чтобы EF мне доверяла.

Это означает, что я могу легко обновить любой из наших клиентов с помощью сценария .sql в любое время и не беспокоиться о том, что EF сходит! :(

Любые идеи, ребята ??

+0

Пожалуйста, объясните, что произойдет, если вы установите инициализатор базы данных на null. –

ответ

5

В дополнение к установке инициализатору к null добавить также это в контекст класса:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    model.Conventions.Remove<IncludeMetadataConvention>(); 
} 

Это выключит хэш сравнения

7

С больше. недавние версии Entity Framework, вам больше не нужно делать то, что говорит Ladislav Mrnka. С EF 4.3 вам просто нужно установить инициализатор для WebContext равным нулю. Например:

Database.SetInitializer<FabrikamFiberWebContext>(null); 
Смежные вопросы