原文:entity framework codefirst資料遷移
前言緊接著前面一篇博文entity framework codefirst嘗試。
我們知道無論是「database first」還是「model first」當模型發生改變了都可以通過visual studio設計檢視進行更新,那麼對於code first如何更新已有的模型呢?今天我們簡單介紹一下entity framework的資料遷移功能。
entity framework配置
當我們對專案進行entity framework進行安裝引用的時候,同時生成了兩個配置檔案
packages.config檔案:
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>packages.config內容比較簡單,首先是ef自身版本,然後在安裝過程中根據當前應用的.net framework版本配置了「targetframework」,因為不同的.net framework版本對應的ef程式集不同,這在安裝過程中會自動識別並配置。
<?xml version="1.0" encoding="utf-8"?>codefirst 資料遷移
從異常資訊我們可以看出,ef已經檢測到模型發生了改變,建議我們使用」code first migrations」對模型進行更新。
在開始code first資料庫遷移之前,我們先對上一節編寫的ordertestcontext類進行修改新增預設建構函式,因為code first migrations將會使用資料庫上下文的預設建構函式進行資料遷移操作(儘管沒有預設建構函式所有的資料操作都能正常進行,但是對於資料遷移這是必須的),因此我們需要新增乙個預設建構函式,並且該建構函式中必須傳入我們的資料庫連線名稱,否則將會把更新應用到ef預設資料庫上。下面是我們的ordertestcontext:
public class ordertestcontext:dbcontext下面我們將借助於」code first magrations」 進行模型更新。然後找到如下圖所示的位置public ordertestcontext(string connectionname)
: base(connectionname)
public dbsetorders
public dbsetorderdetails
}
1.在「程式包管理器控制台」鍵入命令:enable-migrations -projectname codefirsttest
如果多次執行此命令可以新增-force引數
新增後,專案中新增了乙個名為migrations的資料夾
檢視configuration檔案中的**為:
namespace codefirsttest.migrations方法seed中可以進行資料遷移後的資料初始化工作,將在每次遷移之後執行。如上**所示,addorupdate是idbset的擴充套件方法,如果指定條件的資料不存在,則會新增,如果存在,會更新。所以,如果資料是通過此方法來初始化的,在與業務更新之後,再次進行資料遷移後,還是會被還原。protected override void seed(codefirsttest.ordertestcontext context)
,// new person ,
// new person
// );//}
}}
還有乙個名為initialcreate的類,配置生成資料庫的細節:
namespace codefirsttest.migrations3.執行「add-migration addemployee」命令,新增乙個名為addemployee的遷移) .primarykey(t => t.id);
createtable(
"dbo.orderdetails",
c => new
).primarykey(t => t.id)
.foreignkey("dbo.orders", t => t.orderid, cascadedelete: true)
.index(t => t.orderid);
}public override void down()
);dropforeignkey("dbo.orderdetails", "orderid", "dbo.orders");
droptable("dbo.orderdetails");
droptable("dbo.orders");}}
}
4.執行「update-database」命令,更新資料庫架構
如果更新資料庫存在衝突而不能執行更新,可以新增 -force強制執行,例如:「update-database -force」
5.設定自動遷移
每次都通過控制台來進行遷移太過麻煩,可以設定為自動遷移。
1. automaticmigrationsenabled:獲取或設定 指示遷移資料庫時是否可使用自動遷移的值。
2. automaticmigrationdatalossallowed:獲取或設定 指示是否可接受自動遷移期間的資料丟失的值。如果設定為false,則將在資料丟失可能作為自動遷移一部分出現時引發異常。
**呼叫例項
using (var db = new ordertestcontext("codefirsttest"))呼叫結果展示,customer is ", o.id, o.customer);}}
EF 的 code first 資料遷移
當開發過程中,由類生成了資料庫。但是,在後續的開發過程,要更改某個資料庫的表的列或是增加乙個資料表的時候。ef6.0的操作分別為 為類新增列 比如 cuser 類有name adress兩列。現在需要新增 school一列。使用code first 進行 遷移 migration,步驟如下 1 在v...
code first遷移和部署
從 工具 選單中,選擇 nuget 包管理器 包管理器控制台 在pm 提示符處輸入以下命令 enable migrations add migration initialcreate執行第一次遷移 當您執行add migration命令時,遷移生成的 將從頭開始建立資料庫。此 也是在遷移資料夾中,在...
CodeFirst遷移注意點
context建構函式 不檢查 migrationhistory 取消當資料庫模型發生改變時刪除當前資料庫重建新資料庫的設定。database.setinitializer null 重新建立資料庫 database.setinitializer new dropcreatedatabaseifmo...