3

Я пытаюсь выполнить миграцию из кода. Я создал свои модели и позволили-миграцию, а затем добавил начальную миграцию, эта начальная миграция содержит все создание таблиц и т.д.
Код структуры Entity Framework - исходный код миграции не работает

public partial class Initial : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(.......... 
    } 

public override void Down() 
    { 
      DropTable(........... 
    } 
} 

Затем я попробовал команду Update-Database с визуальной студии, которая прекрасно работает, создает базы данных и запускает первоначальную миграцию.

Затем я удаляю базу данных из Sql Studio. Затем я запустить приложение консоли, которая вызывает класс Менеджер миграции

// MigrationManager class 

    public static bool PerformMigration(string migrationId) 
    { 
     bool success = false; 
     try 
     { 
      DbMigrationsConfiguration<MyDbContext> config = new Configuration(); 
    .... 
      DbMigrator migrator = new DbMigrator(config); 
      migrator.Configuration.AutomaticMigrationsEnabled = false; 
      if (string.IsNullOrEmpty(migrationId))      
       migrator.Update(); --> fails saying pending migration 
      else 
       migrator.Update(migrationId); 

      success = true; 
     } 
     catch (Exception e) 
     { 
      success = false; 
      LastException = e.Message; 
     } 

     return success; 
    } 

Update() терпит неудачу со следующей ошибкой:

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

//Configuration.cs 
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 

    protected override void Seed(WorkflowConfigurationDbContext context) 
    { 
     SeedData(context); 
    } 
    private void SeedData(){...}  

} 

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
    {    
    }   

    public DbSet.... 

    } 

Когда я пошагово вызова Update(), он переходит в конфигурации() конструктор и MyDbContext() конструктор, но не после того, что, кажется, его не пытается Начальные миграций на всех.

ответ

0

Убедитесь, что стратегия инициализации базы данных правильно в конструкторе вашего EF контекста, как и:

public partial class YourContext: DbContext 
{ 
    static YourContext() 
    { 
     Database.SetInitializer<YourContext>(new CreateDatabaseIfNotExists<YourContext>()); 
    } 
} 

Это выполняется в первый раз, база данных, доступ.

EDIT: Вторая проблема может быть связана с безопасностью: имеют ли пользователь, выполняющие миграцию, необходимые разрешения?

+0

Спасибо за ваш ответ, я уже пробовал это без успеха :( – wk4questions

+0

Отредактировал свой ответ: как насчет безопасности? –

0

Обнаружили проблему, это было неправильное пространство имен.

DbMigrationsConfiguration<MyDbContext> config = new Configuration(); 
config.MigrationsNamespace = "Correct Namespace"; 
Смежные вопросы