2012-11-14 41 views
1

現在,我使用EF6的Alpha,並使用遷移時,它會添加一個新的遷移日誌到__MigrationHistory表。實體框架6碼第一次遷徙的ContextKey

在EF6,該__MigrationHistory表中有一個名爲 「ContextKey」 新列。經過測試,我發現有兩個默認的「ContextKey」值:

  1. 當我運行代碼的DbContext的派生class.This全稱發生:

    Database.CreateIfNotExists(); 
    
  2. DbMigrationsConfiguration的全名派生類。這發生在我運行的代碼:

    public ArticleDbContext() 
    { 
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ArticleDbContext, ArticleConfiguration>()); 
    } 
    

我第一次運行應用程序, 「Database.CreateIfNotExists();」創建一個新的數據庫對我來說,映射到ArticleDbContext定義的模型,然後添加一個__MigrationHistory行已ContextKey的值爲「Module.Article.Model.ArticleDbContext」也是所有表。

然後「Database.SetInitializer(new MigrateDatabaseToLatestVersion());」將運行,此代碼將生成一個新的ContextKey「PowerEasy.Module.Article.Migrations.ArticleConfiguration」。遷移使用此ContextKey查詢__MigrationHistory表並找出沒有數據。同樣,它將創建映射到ArticleDbContext中定義的模型的所有表,但表已存在於數據庫中,因此會拋出異常,並告訴我「表XXX已存在」。

我怎樣才能解決這個問題?

回答

5

您不應該混合Migrations和Database.CreateIfNotExists方法(或構建於其上的任何初始化程序)。如果數據庫不存在,遷移將負責創建數據庫。

作爲Migrations初始化程序的替代方法,還可以使用DbMigrator.Update方法應用遷移。如果您想要在初始化程序觸發它之前創建/更新數據庫,這非常有用。

+0

非常感謝你,我已經解決了它。 – RongieZeng

相關問題