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

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

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), который создаст базу данных с помощью my web.конфигурационный файл 2. все миграции будут применяться к созданной базе данных в порядке их создания.

спасибо. :)

2 ответов


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

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

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

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

  4. в пакете-управление-консоль типа "обновление-база данных"

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


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

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

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