EntityFramework,是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)同樣,html
一是爲了使開發人員以操做對象的方式去操做關係型數據表。數據庫
二是爲了屏蔽底層不一樣廠商的數據庫,開發人員面向ORM框架編寫數據的CRUD(Create,Retrieve,Update,Delete)操做,再由ORM框架將這些操做翻譯成不一樣數據庫廠商的語言。服務器
從EF 4.X開始支持三種構建方法:1. Database First方法。2.Model First方法。3.Code First 方法。app
本次測試以Visual Studio2013 / MS Sql Server2012 / Entity Framework 6.X 測試EF 框架
Model First Demo (Models修改了,中間不能直接映射數據庫)工具
【Model First 導航屬性:不須要本身建立,是表之間有了關聯以後,本身就會建立出來】性能
//注意:更新Model到數據庫時會刪除原來表格和數據,再建立新的表格學習
關鍵:關係的建立測試
1: 建立空模型的實體數據模型,spa
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文件】