2016-12-15 8 views
0


Я использую EF 6 и код первого в проекте
Я пытаюсь понять, используя команду 'Enable-переселений.
Примеры DbContext и Initializer приведены в простейшей форме, как показано ниже.

Когда я даю команду «включить-Миграцию»
пакета-менеджер консоли выдает ошибку, как показано ниже:, что является причиной получения «Не удалось обновить ошибка базы данных», давая включить-Миграции команду

Невозможно обновить базу данных в соответствии с текущей моделью, потому что есть ожидающие изменения и автоматическая миграция отключен , Либо записывайте ожидающие изменения модели в миграцию на основе кода, либо разрешайте автоматическую миграцию. Установите DbMigrationsConfiguration.AutomaticMigrationsEnabled в true, чтобы включить автоматическую миграцию.

Но если я не называю InitializeDatabase(); метод из конструктора MyDbContext нет возникновении ошибки и ни импорта данных или метод семян не работает.
Создана только база данных.

Я хочу узнать, в чем причина и какова средняя ошибка. Если я использую метод InitializeDatabase().
Спасибо

public class MyDbContext : DbContext 
{ 
    public MyDbContext():base("TestDb") 
    { 
     Database.SetInitializer(new DbContextInitializer()); 
     InitializeDatabase(); 
    } 

    protected virtual void InitializeDatabase() 
    { 
     if (!Database.Exists()) 
     { 
      Database.Initialize(true); 
     } 
    } 

    public DbSet<TestModel> TestModels { get; set; } 
} 

public class DbContextInitializer : CreateDatabaseIfNotExists<MyDbContext> 
{ 
    protected override void Seed(MyDbContext context) 
    { 
     base.Seed(context); 
     context.TestModels.Add(new TestModel() { 
      Name = "Lorem", 
      Surname = "Ipsum" 
     }); 
    } 
} 

ответ

1

Ваш инициализатор наследуется от CreateDatabaseIfNotExists, который не является логичным выбором для миграции. У вас есть некоторые ожидающие изменения модели, которые не применяются, поскольку модель изменилась, и ваш инициализатор будет запускаться только тогда, когда база данных не существует.

Вы можете удалить свою базу данных, чтобы она повторно инициализировалась с изменениями или переключила ваш инициализатор на MigrateDatabaseToLatestVersion. Вот хорошая статья на initializers and seeding.

 Смежные вопросы

  • Нет связанных вопросов^_^