標籤:
1.DBContext的代碼如下:
1 public class Context:DbContext 2 { 3 public Context() 4 : base("name=ConnStr") 5 { 6 7 } 8 9 public DbSet<Menu> Menus { get; set; }10 }
2.Menu類如下:
1 [Table("Menu")] 2 public class Menu 3 { 4 [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 5 public int ID { get; set; } 6 [Required] 7 public int PID { get; set; } 8 [Required] 9 public string Name { get; set; }10 [Required]11 public string Url { get; set; }12 }
Ctrl+F5運行沒有問題。
3.修改Menu類,改成如下:
[Table("Menu")] public class Menu { [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ID { get; set; } [Required] public int PID { get; set; } [Required] public string Name { get; set; } [Required] public string Url { get; set; } public string Test { get; set; } }
再次運行,發現此時報錯
報錯的原因是因為資料庫的結構已經改變,此時有兩種方法可以解決該問題。
1.設定每次資料庫結構改變之後都刪除原先的資料庫再重建
只需要加上下面的代碼:
public Context() : base("name=ConnStr") { Database.SetInitializer(new DropCreateDatabaseIfModelChanges<Context>()); this.Database.Initialize(true); }
這樣設定之後再次運行沒有問題,但是由於資料庫被刪掉了再重建的,所以原先的資料都沒有了。要想保留原先的資料可以使用Migration資料移轉的方式
2.資料移轉
1)點擊工具選項卡,選擇程式包管理主控台
2)輸入命令Enable-Migrations,此時在項目下會建立一個Migrations檔案夾,裡麵包括一個Configuration.cs檔案
3)輸入命令Add-Migration XXXX,此時會在Migrations檔案夾下建立一個yyyyMMddHHmmss_XXXX.cs檔案,裡麵包括一個Down和UP方法,分表表示此次資料移轉復原和升級的方法
4)輸入命令Update-Database-Verbose,資料移轉完成,可以看到資料移轉的SQL語句。
CodeFirst資料移轉