Entity Framework v6.1 開始原生支持將Code First 應用於一個已經存在的數據庫。下面以一個demo來介紹如何把Code First 應用於已經存在的數據庫以及如何使用Code First 遷移來更新數據庫。
1.把Code First應用於已經存在的數據庫
首先,創建數據庫CodeFirstFromExistingDB,接着創建兩個表Categories 和 Products ,表結構如下:
Categories :
Products:
然后插入測試數據:
接着,創建一個MVC項目並且從數據庫生成Code First 數據模型:
1.創建一個名為CodeFirstExistingDB的web應用 ,並且設置身份驗證為個人用戶賬戶
web應用創建完成后,右擊項目目錄添加文件夾DataModel,右擊文件夾DataModel選擇添加-新建項-數據-ADO.NET實體數據模型,設置名稱為:StoreContext
點擊添加,在向導頁選擇來自數據庫的Code First
點擊下一步,在選擇連接界面點擊新建連接,
在連接屬性頁面,設置數據庫信息:
點擊下一步,選擇數據庫對象(表),並且勾選確定所生成對象名稱的單復數形式復選框
ADO.NET實體數據模型創建完成后,會在DataModel文件夾下創建Product、Category以及StoreContext三個類。
接着添加控制器和視圖來展示數據:
生成項目,然后右擊Controller文件夾,選擇添加-控制器,選擇包含視圖的MVC5控制器(使用Entity Framework),控制器設置如下:
創建完成后,右擊視圖文件件下Products文件夾下的index.cshtml,在瀏覽器中查看,可以看到數據展示到頁面上。
2.使用Code First 遷移更新數據庫
Code First 遷移,可以把你在代碼中對模型的修改更新到數據庫,要使用Code First 遷移,首先需要打開它:
在工具-NuGet包管理器-程序包管理器控制台輸入:Enable-Migrations -ContextTypeName CodeFirstExistingDB.DataModel.StoreContext ,回車。(注意,需要制定需要使用的上下文(context)因為在創建項目時自動創建了身份驗證的上下文)。執行完成之后會創建Migrations 文件夾,里面包含一個Configuration.cs 類。
此時,要使Code First工作還需要一個額外的步驟,如果現在創建一個遷移,它會嘗試把上下文里包含的說有實體添加到數據庫,由於Products和categories 表已經存在於數據庫中,所以遷移會失敗。所以首先需要創建一個初始化為空的遷移,然后我們就可以對任何修改添加遷移了。
在包管理器控制台輸入:Add-Migration InitialCreate -IgnoreChanges 以創建一個空的遷移。
IgnoreChanges 標識用於確保這次遷移不會做任何事。執行它會在數據庫中創建migrations 表,migrations 表是一個對數據庫遷移之前的快照。
接着,在包管理器控制台輸入:update-database 用於把初始化遷移更新到數據庫。
遷移初始化完成后,來使用Code First 遷移 更新數據庫:
在Product表中添加Description 列,並且設置長度為50,([StringLength(50)] );現在添加一個新的遷移來把修改更新到數據庫。
在包管理器控制台輸入:Add-Migration add_product_description ,執行后Migrations 文件夾會增加一個文件,用來描述這次遷移。接着,在包管理器控制台輸入:
update-database , 新的列就會被增加到Products表中。