EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)一樣,
一是為了使開發人員以操作對象的方式去操作關系型數據表。
二是為了屏蔽底層不同廠商的數據庫,開發人員面向ORM框架編寫數據的CRUD(Create,Retrieve,Update,Delete)操作,再由ORM框架將這些操作翻譯成不同數據庫廠商的語言。
從EF 4.X開始支持三種構建方法:1. Database First方法。2.Model First方法。3.Code First 方法。
本次測試以Visual Studio2013 / MS Sql Server2012 / Entity Framework 6.X 測試EF
Model First Demo (Models修改了,中間不能直接映射數據庫)
【Model First 導航屬性:不需要自己創建,是表之間有了關聯之后,自己就會創建出來】
//注意:更新Model到數據庫時會刪除原來表格和數據,再創建新的表格
關鍵:關系的創建
1: 創建空模型的實體數據模型,
2: 創建實體、關系
3: 關系包括:1:1,1:n,m:n (建議不要使用1:1,性能低(不會延遲加載,添加時必須同時創建兩個對象),可以使用1:m的方式進行代替處理)
關系m:n,有一張中間表,左:1:m 關系,右:1:n 關系,在數據庫中存在這張中間表,在edmx中不存在(可以使用導航屬性操作m:n關系)
4: 可以生成導航屬性,也可以不生成
1:打開SQLServer2012,使用下面SQL文本創建MyFirstModelFirstEF數據庫(Model First EF不會幫我們創建數據庫,只會幫我們創建表。所以我們要事先把數據庫建立好)
create database MyFirstModelFirstEF on primary ( name='MyFirstModelFirstEF.mdf', --修改為自己電腦上SQL DB路徑 filename='D:\yangZ_MSSQL\MyFirstModelFirstEF.mdf', size=5mb, maxsize=100mb, filegrowth=10% ) log on ( name='MyFirstModelFirstEF_log.ldf', --修改為自己電腦上SQL DB路徑 filename='D:\yangZ_MSSQL\MyFirstModelFirstEF_log.ldf', size=2mb, maxsize=100mb, filegrowth=5mb ) go
2:新建ConsoleApplication應用程序
3:在EFDataBaseFirstDemo上 右鍵-->新建-->新建項-->數據-->ADO.NET實體數據模型,選擇空模型,然后點擊完成
4:此時會自動打開**.edmx設計界面(若沒有打開,直接在項目解決方案中,雙擊**.edmx文件)
5:通過edmx設計界面, 我們把上次Database First Demo中的CustomerInfo/OrderInfo表格生成出來,如下圖所示,並導入數據庫
6:在edmx設計頁面,一種可以通過工具箱,拖拽設計頁面,另外一種直接右鍵-->新增來設計表格,本次直接通過右鍵-->新增來設計表格
6.1:設計CustomerInfo表格,在**.edmx設計界面空白處,直接右鍵-->新增-->實體,填寫相關內容(在這里可以設置主鍵id為Identity,默認為自增長為1,這個在Model First設計界面沒辦法修改默認自增長值)
此時,選中id屬性,鼠標右鍵-->屬性(或者直接F4),可以打開屬性界面,在屬性界面可以繼續修改剛剛創建的字段
6.2:繼續新增customerName string類型/customerDate datetime類型
選中CustomerInfo設計界面,右鍵-->新增-->標量屬性,修改name==customerName,選中剛剛新增的customerName字段,修改屬性(F4)
關於MSSQL Server數據類型介紹參考:http://www.cnblogs.com/Dr-Hao/p/5197238.html
6.3:新增customerDate datetime類型字段,右鍵-->新增-->標量屬性,修改name==customerDate,選中剛剛新增的customerDate字段,修改屬性(F4)
關於MSSQL Server數據類型介紹參考:http://www.cnblogs.com/Dr-Hao/p/5197238.html
至此CustomerInfo數據庫字段已經創建完畢,OrderInfo表格和字段(id[int],orderName[nvarchar(100)],customerId[int,foreign key])創建類似
6.4:把CustomerInfo和OrderInfo表格建立關聯關系(在**.edmx空白處,右鍵單擊-->新增-->關聯)
最后整體**.edmx實體圖顯示如下:
7:此時,數據庫中沒有數據表。我們在edm設計器上空白地方,右鍵-->根據模型生成數據庫
[Model First EF不會幫我們創建數據庫,只會幫我們創建表。所以我們要事先把數據庫建立好]
點擊下一步,如下圖,生成對應的SQL文本
點擊完成(有可能出現下面的警告),點擊確定之后,如下圖所示:
當連接服務器成功以后,點擊:執行腳本。則會在數據庫MyFirstModelFirstEF中生成相應的數據表
最后ModelFirstEFDemo整體結構如下所示:
最后在ConsoleApplication中做一個增加數據的Demo
DbContext context = new Model1Container(); //使用導航屬性 新增CustomerInfo和OrderInfo數據 CustomerInfo customer = new CustomerInfo() { customerName = "ModelFirstTestOne", customerDate = DateTime.Now }; customer.OrderInfo.Add(new OrderInfo() { orderName = "ModelFirstTestTwo" }); context.Set<CustomerInfo>().Add(customer); context.SaveChanges();
此時數據庫數據如下所示:
參考文章:
ASP.NET MVC EF直接更新數據(不需查詢):http://www.cnblogs.com/Dr-Hao/p/5255630.html
ASP.NET EF(LINQ/Lambda查詢):http://www.cnblogs.com/Dr-Hao/p/5356928.html
ASP.NET EF 使用LinqPad 快速學習Linq:http://www.cnblogs.com/Dr-Hao/p/5357112.html
Ps:使用EF Model First時,若修改Model結構,或者字段,需要在**.edmx中做如下操作
重復第7步驟:此時,數據庫中沒有數據表。我們在edm設計器上空白地方,右鍵-->根據模型生成數據庫 [Model First EF不會幫我們創建數據庫,只會幫我們創建表。所以我們要事先把數據庫建立好]
注意:更新Model到數據庫時會刪除原來表格和數據,再創建新的表格
即為:原來表格中的數據都會刪除掉,然后重新創建新的表格(對於數據量比較大的表格,不能這樣操作),可以通過【手動修改數據庫和edmx文件】