1. 程式人生 > 其它 >ASP.NET MVC學習筆記07資料表和模型新增新欄位

ASP.NET MVC學習筆記07資料表和模型新增新欄位

給電影表和模型新增新欄位

在本節中,您將使用Entity Framework Code First來實現模型類上的操作。從而使得這 些操作和變更,可以應用到資料庫中。

預設情況下,就像您在之前的教程中所作的那樣,使用 Entity Framework Code First自 動建立一個數據庫,Code First為資料庫所新增的表,將幫助您跟蹤資料庫是否和從它生 成的模型類是同步的。如果他們不是同步的,Entity Framework將丟擲一個錯誤。這非 常方便的在開發時就可以發現錯誤,否則您可能會在執行時才發現這個問題。 (由一個晦澀的錯誤資訊,才發現這個問題。)

為物件模型的變更設定 Code First Migrations

從解決方案資源管理器中雙擊Movies.mdf,開啟資料庫工具, 在資料庫工具 (資料庫資源管理器、 伺服器資源管理器或 SQL Server物件資源管理器),右鍵單擊 Movies.mdf, 並選擇刪除。

Build應用程式,以確保沒有任何編譯錯誤。 從工具選單上,單擊庫包管理器,然後點選程式包管理器控制檯。

在程式包管理器控制檯視窗,在提示符 PM> 後輸入: Enable-Migrations -ContextTypeName StudyMVC.Models.MovieDBContext

注意:如果你設定了其他專案名稱,請自行修改。 如上所示的Enable-Migrations命令,會在Migrations 資料夾下建立一個Configuration.cs

檔案。

Code First Migrations呼叫Seed的方法,每個遷移(程式包管理器控制檯 更新資料庫 ),此方法用於updates資料(如果資料存在),或inserted資料。 在AddOrUpdate方法在下面的程式碼執行一個的“upsert”操作:

	context.Movies.AddOrUpdate(i => i.Title,
new Movie 
    { 
        Title = "When Harry Met Sally", 
        ReleaseDate = DateTime.Parse("1989-1-11"), 
        Genre = "Romantic Comedy", 
        Rating = "PG", 
        Price = 7.99M 
}

因為 Seed方法與每個遷移同時執行時,故,你不能僅僅插入資料,因為當你正試圖添 加,可能已經完成了建立資料庫後的第一次遷移。“upsert”操作阻止錯誤的發生,如果你嘗試插入一個已經存在的行,它覆蓋任何資料更改,當你在測試應用程式的同時。你可能不希望這樣的事情發生:在某些情況下,當您更改資料測試時,你希望你的變化後資料 庫同步更新。在這種情況下,你想要做一個有條件的插入操作:只有當它不存在的時候,插入一行。

傳遞給 AddOrUpdate的方法的第一個引數, 指定的屬性來使用以檢查是否已存在某行。 對於您所提供的測試影片的資料,Title屬性可以被用於此目的,因為每個標題在列表中 是唯一:

context.Movies.AddOrUpdate(i => i.Title,

這個程式碼假設titiles屬性是唯一的。如果手動新增一個重複的標題,你會得到下面的異 常。

Sequence contains more than one element

CTRL-SHIFT-B來Build工程。(如果此次Build不成功,以下的步驟將會失敗。)

下一步是建立一個DbMigration類,用於初始化資料庫遷移。此遷移類將建立新的資料 庫,這也就是為什麼在之前的步驟中你要刪除movie.mdf檔案。

在軟體包管理器控制檯視窗中,輸入”add-migration Initial“命令來建立初始遷移。”Initial“ 的名稱是任意,是用於建立遷移檔案的名稱。