code first 資料遷移,表 ,資料修改

2021-09-24 11:58:56 字數 3259 閱讀 1102

原文: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

public ordertestcontext(string connectionname)

: base(connectionname)

public dbsetorders

public dbsetorderdetails

}

下面我們將借助於」code first magrations」 進行模型更新。然後找到如下圖所示的位置

1.在「程式包管理器控制台」鍵入命令:enable-migrations -projectname  codefirsttest

如果多次執行此命令可以新增-force引數

新增後,專案中新增了乙個名為migrations的資料夾

檢視configuration檔案中的**為:

namespace codefirsttest.migrations

protected override void seed(codefirsttest.ordertestcontext context)

,// new person ,

// new person

// );//}

}}

方法seed中可以進行資料遷移後的資料初始化工作,將在每次遷移之後執行。如上**所示,addorupdate是idbset的擴充套件方法,如果指定條件的資料不存在,則會新增,如果存在,會更新。所以,如果資料是通過此方法來初始化的,在與業務更新之後,再次進行資料遷移後,還是會被還原。

還有乙個名為initialcreate的類,配置生成資料庫的細節:

namespace codefirsttest.migrations

) .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");}}

}

3.執行「add-migration addemployee」命令,新增乙個名為addemployee的遷移

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...