2013-03-21 8 views
7

Я пытаюсь использовать первые миграции EF-кода для создания базы данных, если она не существует. До сих пор я успешно прошел Enabled-Migrations. Я также использовал Add-Migrations, чтобы выполнить начальную миграцию, которая создает базу данных. Сценарий находится в направлении Migrations и выглядит правильно.MigrateDatabaseToLatestVersion инициализатор не удается создать базу данных

Это тело моего главного метода

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>()); 
var directConfigContext = new MyDbContext(); 

Все, что я читал, что говорит, что это все, что мне нужно. MyDbContext в app.config и выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <connectionStrings> 
     <add name="MyDbContext" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=DbConfig;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

Кроме того, если я использую класс DbMigrator предоставленный EF, база данных построена корректно (предположительно с использованием первоначальной миграции сценария базы данных).

// This is how it actually works including creating the database if it doesn't exist. 
var dbMigrator = new DbMigrator(new Configuration()); 
dbMigrator.Update(); 

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

ответ

7

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

MyDbContext.MyEntity.Add(new MyEntity { Name = "Nelson" }); 
// Or 
MyDb.Context.Database.Initialize(true); // force the initialization 
1

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

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

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