文章出處

  在模型類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文件夾刪除了之后重新開始做上面的操作

  http://www.asp.net/mvc/overview/older-versions/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table

 


文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()