Как создать базу данных с использованием первых миграций кода?

У меня есть проект ASP.NET MVC 3, который использует Entity Framwork 4.3 и его миграции. Теперь я хочу, чтобы Entity Framework создала для меня базу данных, используя уже выполненные миграции. Когда я пытаюсь запустить Update-Database script, он дает мне следующее:

Update-Database -Verbose -ProjectName AssemblyWithMigrations -StartUpProjectName WebProjectAssembly No migrations configuration type was found in the assembly '/* my name of assembly */'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

Но, когда я пытаюсь запустить Enable-Migrations, я вижу следующее:

Migrations have already been enabled in project 'AssemblyWithMigrations '. To overwrite the existing migrations configuration, use the -Force parameter.

Итак, проблема в том, что EF пытается разрешить текущую версию миграции для обновления базы данных, я полагаю. Но база данных не существует, и она явно терпит неудачу.

Вопрос: как использовать миграции EF для создания базы данных, если она не существует? Или, каков правильный способ сделать это с помощью консоли Nuget?

В заключение, что я хочу: 1. Запустите команду (возможно, update-database), которая создаст базу данных с помощью моего файла web.config 2. все миграции будут применены к созданной базе данных в порядке их создания.

Спасибо.:)

Ответы

Ответ 1

Я понимаю, что это старый вопрос, но какого черта....

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

  • Удалите свою базу данных из обозревателя объектов SQL Server
  • Удалите все существующие миграции из папки Migrations.
  • В окне "Управление пакетами-консоли" "Add-Migration InitialCreate"

    [необязательно, в зависимости от инициализатора базы данных]

  • В окне Package-Management-Console "update-database"

Это даст вам одну миграцию script, которая приведет вас из "нет базы данных" к базе данных, которая соответствует вашей текущей модели.

Ответ 2

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

Стратегии инициализации базы данных: используйте любые комментарии, относящиеся к вам.

public DataContext(): base("DefaultConnection") 
{
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfModelChanges<DataContext>());
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfNotExists<DataContext>());                                                            
  // Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>());
}