2014-11-13 3 views
6

Я пытаюсь понять, как реализовать следующий сценарий развертывания с использованием EF-кода и миграции. Идея состоит в том, что я хотел бы обновить БД с помощью изменений обратной совместимости (например: добавить столбец) и проверить, что все еще работает. Он вдохновлен внедрением зеленого/синего цвета, но он не совсем следует этому шаблону. Смысл этого в следующем этот процесс:Переходы DB DF с обратной совместимостью

  1. Обновление базы данных (EF миграция)
  2. Test сайт
  3. Обновление сайта код
  4. Если что-то пойдет не так, вернуться к предыдущему коду сайта

Проблема, с которой я, безусловно, столкнусь, заключается в том, что на шаге 2 (и 4) я обязательно получу ошибку от EF об изменении модели, хотя все изменения БД совместимы с существующим кодом ...

Я знаю, что решением было бы перенести «вниз» базу данных на предыдущую версию (или даже сделать резервную копию БД), но может случиться так, что некоторые миграции действительно сложны и часть «Вниз» может быть нарушена или просто плохо кодируется.

Так что мой вопрос: есть ли способ избежать EF проверки модели или, в конце концов, знать, что изменения обратно совместимы?

ответ

3

Установка dbinitializer в значение null приведет к отбрасыванию проверки на совместимость, например.

public class MyDBContext: DbContext 
{ 
    public MyDBContext() : base("myConnString") 
    {    
     //Disable initializer 
     Database.SetInitializer<MyDBContext>(null); 
    } 
    public DbSet<A> As { get; set; } 
    public DbSet<B> Bs { get; set; } 
} 

также предложил here

+0

Интересно ... Я был уведен битом развертывания и не мог найти этот вопрос. В любом случае, нет возможности проверить право на прямую/обратную совместимость? Я думаю, вы можете либо получить полную проверку, либо вообще не иметь ее ... – Tallmaris

+0

Не то, чтобы я знал. Я бы не отключил проверку совместимости, так как эта мигающая причина еще больше головных болей ... Если возможно, я бы предложил сделать регрессию/интеграцию/модульные тесты локально/или сервером сборки. Если вы полагаетесь на определенные данные, вы можете использовать scritps в тестах или создать собственный db-инициализатор и переопределить его метод семени. – Indregaard