在模型類Movie中添加一個新的屬性Rating
重新編譯重新生成解決方案,快捷鍵Ctrl+Shift+B;然后對去對應的視圖添加新的數據,如Index.cshtml中
編輯完成,運行之后系統報了一個異常:“System.InvalidOperationException”類型的異常在 EntityFramework.dll 中發生,但未在用戶代碼中進行處理
造成這個異常的原因是Movie類中比數據庫中多出了一個Rating列,所以我們需要去數據庫中添加上Rating字段,你只需要打開數據庫文件編輯就行;
現在我們來介紹另外一種方法:使用 Code First 遷移更新數據庫
首先,我們需要將App_Data文件夾下的數據庫文件(Movies.mdf)刪除,然后打開“程序包管理器控制臺”(你可以在“工具”菜單下的“NUGet程序包管理器”中找到它),并在控制臺中輸入 Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDBContext
繼續輸入命令 add-migration Initial
成功后你會看到解決方案中多了一個Migrations文件夾和Configuration.cs文件,在Configuration類有個Seed方法,在遷移到最新版本之后,將會調用此方法。所以我們需要添加一些初始化的值,否則在執行update-database的時候會失敗,就像下圖中的那樣
在Seed中為數據庫表創建一個初始對象
protected override void Seed(MvcMovie.Models.MovieDBContext context) { context.Movies.AddOrUpdate(i => i.Title, new Movie { Title = "When Harry Met Sally", ReleaseDate = DateTime.Parse("1989-1-11"), Genre = "Romantic Comedy", Price = 7.99M }); }
現在再執行update-database就可以成功了,你會看到控制臺提說說運行了Seed方法,并且數據庫文件也創建好了
在這里你會好奇為啥沒看到Rating字段,因為再刪除數據庫之前的時候我把要增加的屬性Rating注釋了,如果不注釋掉,Rating會被自動添加上的,也就沒有我們新增字段這一說了,或者說添加另外一個新的字段Note、Screenwriters...;如果你在執行上面的過程中沒有注釋掉Rating,為了完成添加新的屬性這個任務,你就再創建一個新的屬性,而我這里還是用的Rating
現在我們為數據庫添加新的列 add-migration Rating,執行完后還需要執行 update-database
查看數據庫表結構,我們看到了新增的Rating列
我們添加新的屬性可以不用再刪除數據庫而直接添加了,只需要在控制臺執行 add-migration 屬性名 和 update-database 指令就行;現在你可以直接運行項目了,它不再會報錯。
如果在執行 update-database 過程中一直遇到錯誤,你可以將Migrations文件夾刪除了之后重新開始做上面的操作
文章列表