Как создать базу данных с использованием первых миграций кода?
У меня есть проект 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>());
}