2014-07-22 62 views
0

我已閱讀關於代碼第一次遷移的每篇博文和MSDN文章(http://msdn.microsoft.com/en-us/data/jj591621.aspx),但我不清楚該如何使用它。實體框架代碼第一次遷移問題 - Dataloss

這裏是我的項目遷移歷史:

1.Initially我用「啓用的遷移」,然後添加遷移和更新數據庫。 2.我部署了項目 3.我對模型做了一些小改動。重新運行添加遷移和更新數據庫。 4.部署項目 5.我增加了更多的屬性模式。另外,我運行禁用的遷移和運行Enable-遷移-EnableAutomaticMigration 6.現在,當我部署項目..和運行的第一次,所有現有數據已經​​一去不復返了

老項目的應用程序(步驟#4) - 遷移\ Configurations.cs

namespace POC_Manager.Migrations 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Migrations; 
    using System.Linq; 

    internal sealed class Configuration : DbMigrationsConfiguration<POC_Manager.Models.POC_ManagerContext> 
    { 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = true; 
      ContextKey = "POC_Manager.Models.POC_ManagerContext"; 
     } 

     protected override void Seed(POC_Manager.Models.POC_ManagerContext context) 
     { 
      // This method will be called after migrating to the latest version. 

      // You can use the DbSet<T>.AddOrUpdate() helper extension method 
      // to avoid creating duplicate seed data. E.g. 
      // 
      // context.People.AddOrUpdate(
      //  p => p.FullName, 
      //  new Person { FullName = "Andrew Peters" }, 
      //  new Person { FullName = "Brice Lambson" }, 
      //  new Person { FullName = "Rowan Miller" } 
      // ); 
      // 
     } 
    } 
} 

新建項目(步驟#6) - 遷移\ Configurations.cs

namespace POC_Manager.Migrations 
{ 
    using System; 
    using System.Data.Entity; 
    using System.Data.Entity.Migrations; 
    using System.Linq; 

    internal sealed class Configuration : DbMigrationsConfiguration<POC_Manager.Models.POC_ManagerContext> 
    { 
     public Configuration() 
     { 
      AutomaticMigrationsEnabled = true; 
      ContextKey = "POC_Manager.Models.POC_ManagerContext"; 
     } 

     protected override void Seed(POC_Manager.Models.POC_ManagerContext context) 
     { 
      // This method will be called after migrating to the latest version. 

      // You can use the DbSet<T>.AddOrUpdate() helper extension method 
      // to avoid creating duplicate seed data. E.g. 
      // 
      // context.People.AddOrUpdate(
      //  p => p.FullName, 
      //  new Person { FullName = "Andrew Peters" }, 
      //  new Person { FullName = "Brice Lambson" }, 
      //  new Person { FullName = "Rowan Miller" } 
      // ); 
      // 
     } 
    } 
} 

老項目(步驟#4) - 從GET-遷移輸出

PM>獲取的遷移 已應用到目標數據庫檢索遷移。 201405271907443_AutomaticMigration 201404252210039_InitialCreate PM>

新建項目(步驟#6) - 從獲取的遷移輸出

PM>獲取的遷移 已經應用到目標數據庫中檢索遷移。 201407022020263_AutomaticMigration 201406262227296_AutomaticMigration 201405271907443_AutomaticMigration 201404252210039_InitialCreate PM>

另一個令人困惑的是,...我仍然需要運行啓用自動遷移後更新的數據庫的命令?

回答

1

自動遷移是根據您的類的變化自動生成遷移文件;您仍然需要運行更新數據庫,除非您將邏輯構建到初始化策略中。

就數據丟失而言,它很可能基於您使用的初始化策略。我建議你堅持使用CreateDatabaseIfNotExists,除非你的項目真的需要一個自定義初始化器;除了(早期)開發環境以外,其他標準並不是非常有用。

相關問題