3

我試圖從代碼運行遷移。我創造了我的模特和啓用的遷移,然後添加初始遷移,這個初始遷移包含所有創建表等
實體框架代碼優先 - 初始代碼遷移不起作用

public partial class Initial : DbMigration 
{ 
    public override void Up() 
    { 
     CreateTable(.......... 
    } 

public override void Down() 
    { 
      DropTable(........... 
    } 
} 

然後我試圖從Visual Studio工作正常更新,數據庫命令,創建數據庫並運行初始遷移。

然後我從Sql Studio中刪除數據庫。然後我運行調用遷移管理器類

// MigrationManager class 

    public static bool PerformMigration(string migrationId) 
    { 
     bool success = false; 
     try 
     { 
      DbMigrationsConfiguration<MyDbContext> config = new Configuration(); 
    .... 
      DbMigrator migrator = new DbMigrator(config); 
      migrator.Configuration.AutomaticMigrationsEnabled = false; 
      if (string.IsNullOrEmpty(migrationId))      
       migrator.Update(); --> fails saying pending migration 
      else 
       migrator.Update(migrationId); 

      success = true; 
     } 
     catch (Exception e) 
     { 
      success = false; 
      LastException = e.Message; 
     } 

     return success; 
    } 

的更新()失敗,出現以下錯誤控制檯應用程序:

無法更新數據庫,因爲有掛起的更改,並自動遷移到當前的匹配模型被禁用。 將暫掛模型更改寫入基於代碼的遷移或啓用自動遷移。 將DbMigrationsConfiguration.AutomaticMigrationsEnabled設置爲true以啓用自動遷移。

//Configuration.cs 
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
    } 

    protected override void Seed(WorkflowConfigurationDbContext context) 
    { 
     SeedData(context); 
    } 
    private void SeedData(){...}  

} 

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
    {    
    }   

    public DbSet.... 

    } 

當我通過Update()調用步驟,它進入配置()構造函數和MyDbContext()構造函數,但之後失敗了,好像它沒有試圖在所有的初始遷移。

回答

0

確保數據庫初始化策略是正確的在你的EF上下文的構造函數,如:

public partial class YourContext: DbContext 
{ 
    static YourContext() 
    { 
     Database.SetInitializer<YourContext>(new CreateDatabaseIfNotExists<YourContext>()); 
    } 
} 

這是第一次執行訪問數據庫。

編輯:第二個問題可能是關於安全性:正在執行遷移的用戶是否具有所需的權限?

+0

感謝您的回覆,我已經嘗試過,沒有成功:( – wk4questions

+0

編輯我的回答:安全呢? –

0

發現問題,這是不正確的命名空間。

DbMigrationsConfiguration<MyDbContext> config = new Configuration(); 
config.MigrationsNamespace = "Correct Namespace";