前面七篇基本把code first學習了一下,不過code first中會出現乙個問題,就是資料遷移的問題。
一、資料準備
還是在前面的demo上修改,這次使用province和city類。
publicclass
province
public
string provincename
public
virtual icollectioncitys }}
publicclass
city
public
string cityname
public
string proid
[foreignkey(
"proid
")]//
proid一對要存在
public province province
}
static上面的會在資料庫對映如下面的資料表void main(string
args)
;city cityb = new city() ;
province province = new province() };
using (var db = new
efcodefirstdbcontext())
console.readkey();
}
二、資料遷移
1.增加屬性
在city類中增加乙個屬性 description,在建立city物件時增加description,再次執行會報下面的錯誤。
通過下面圖的步驟開啟程式包管理器控制台.
在上面的控制台輸入下面的code,這個在預設專案上要選擇正確,會在專案上增加migrations資料夾和configuration.cs類。
}然後執行下面的code
add-migration initialcreate然後會生成乙個201609061311422_initialcreate.cs類。
namespace執行下面的code生成與上面一致的資料庫efcodefirstdataaccess.migrations
public
override
void
down()}}
此時再次執行上面的c#**就不會再報錯。而且資料庫的結構也和c#的相對應了。
2.增加類
在資料庫模型中新增user類,執行程式包管理器控制台語句,migrations資料夾中新增類檔案
add-migration adduser此時會在專案中增加201609061323573_adduser.cs類。
namespace再次執行下面的codeefcodefirstdataaccess.migrations
) .primarykey(t =>t.userid);
}public
override
void
down()}}
此時再次執行c#專案會在資料庫中對映出乙個users表
3.刪除屬性
這次刪除user類中的age屬性。依次執行下面的兩行
add-migration modifyuser上面的一行會生成乙個201609061334085_modifyuser.cs類。
namespace然後更新到資料庫efcodefirstdataaccess.migrations
public
override
void
down()}}
update-database -verbose4.版本回溯
在專案中可能會存在版本回溯的情況,code first也有對應的解決方案。
update-database –targetmigration: adduser
update-database -verbose
如果你想回滾一切至空資料庫,可以使用命令 update-database –targetmigration: $initialdatabase,此時要在configuration.cs中設定automaticmigrationdatalossallowed = true;
5.生成資料庫版本之間的sql指令碼
執行程式包管理器控制台語句,生成資料庫版本之間的sql指令碼。該操作僅為生成sql語句,並未在資料庫中進行執行。其中-targetmigration在未指定的情況,預設為遷移到最新的版本。
update-database -script -sourcemigration:initialcreate -targetmigration:modifyuser
EF實體框架之CodeFirst一
上面瞎逼逼半天,實際上今天是想大致演示下code first的用法,做簡單的增刪改查。一 model 首先是建立了乙個控制台應用程式efcodefirstdemo,又建立了乙個存放model的類庫efcodefirstmodels,以及乙個與資料庫有關係的類庫efcodefirstdataacces...
EF 分離實體
具體步驟 新建測試專案 如圖 其中respository和model層均為類庫專案,1.在respository層新增ado.net實體資料模型,2.複製model.tt檔案到model層,這是會發生乙個錯誤不用理會它,開啟model.tt檔案,修改const string inputfile mo...
EF實體配置
ef 有 中的模型類的配置有 dataannotations fluentapi 兩種 1.dataannotations 實體類屬性上標註attribute 必填字段標註 required 字段長度 maxlength 5 用 可空字段用 int?如果欄位在資料庫有預設值,則要在屬性上標註 dat...