2013-03-21 45 views
7

我想使用EF代碼第一次遷移來建立數據庫,如果它不存在。到目前爲止,我已經成功地Enabled-Migrations。我還使用Add-Migrations進行初始遷移,以建立數據庫。該腳本處於Migrations方向並且看起來正確。MigrateDatabaseToLatestVersion初始化程序未能創建數據庫

這是我的主要方法的主體

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

一切我讀過說,這是我所需要的。 MyDbContextapp.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> 

此外,如果我用EF提供的DbMigrator類,數據庫建立正確的(可能使用初始數據庫遷移腳本)。

// 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命令來添加一個新的遷移,並在下一次應用程序啓動時正確創建和sed數據庫。

相關問題