Как мне остановить EF (Code First) Проверка изменений схемы - PullRequest
6 голосов
/ 15 марта 2012

У меня есть проблема, которая вызывает выпадение волос ...

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

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

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

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

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

Для EF / Code Сначала делать ... НИЧЕГО! Сладкий ФА! Тупица!

... Если я изменяю схему через внешнее приложение, я хочу, чтобы она полностью игнорировала изменения, и просто ПРИНИМАЮ, что я внес соответствующие изменения в модель для работы с этими изменениями базы данных, выполненными с помощью сценария .sql. Если я пропускаю столбец или таблицу, тогда я принимаю свою глупость и ожидаю истерики, но, пока я не совершу ошибку, я хочу, чтобы EF доверял мне.

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

ЛЮБЫЕ идеи, ребята ??

Ответы [ 2 ]

7 голосов
/ 30 декабря 2014

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

Database.SetInitializer<FabrikamFiberWebContext>(null);
5 голосов
/ 15 марта 2012

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

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

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

Отключит сравнение хешей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...