1.使用EF,建立Model (DataFirst)
- 在解決方案中,建立所使用的項目。例如:ASP網站項目、WinForm窗體項目……
- 在新建的項目中,添加 > 新建項 > 數據 > ADO.NET實體數據模型(.edmx)
- 在新建的.edmx中選擇:從數據庫生成(DatabaseFirst)
- 選擇新建鏈接,填寫鏈接數據庫 > 填寫登陸數據庫信息 > 選擇或輸入須要生成模型的數據庫名稱.
- 選擇須要建立模型的表、視圖、存儲過程
- 點擊下一步,直接生成(有些電腦可能會出現警告信息,忽視便可)。
Entity Framework實體框架(EF)是ADO.NET的開源對象關係映射(ORM)框架,它是.NET Framework的一部分,是一組支持開發面向數據的軟件應用程序的技術。微軟爲實現.NET跨平臺,將EF從.NET分離,使EF更加組件化。2016年6月27日,Entity Framework 7做爲實體框架核心1.0發佈,與ASP.Net Core 1.0和.Net Core 1.0一塊兒發佈,重命名爲凸顯出它是徹底從新而不是增量升級,同時,EF7並不會取代EF6。html
在EF中的實體數據模型(EDM)由如下三種模型和具備相應文件擴展名的映射文件進行定義。
概念架構定義語言文件(.csdl)——定義概念模型
存儲架構定義語言文件(.ssdl)——定義存儲模型
映射規範語言文件(.msl)——定義存儲模型與概念模型之間的映射M。數據庫實體框架 使用這些基於XML的模型和映射文件將對概念模型中的實體和關係的建立、讀取、更新、和刪除操做轉換爲數據源中的等效操做。EDM甚至支持將概念模型中的實體映射到數據源中的存儲過程。數據結構
ORM(Object Relational Mapping)框架採用元數據來描述對象一關係映射細節,元數據通常採用XML格式,而且存放在專門的對象一映射文件中。架構
廣義上來講,ORM能夠被認爲是 面向對象模型和關係型數據庫的數據結構之間的相互轉換。app
狹義上來講,ORM能夠被認爲是,基於關係型數據庫的數據存儲,實現了一個虛擬的面向對象的數據訪問接口。理想狀況下,基於這樣一個面對對象的接口,持續化一個OO對象應該不須要了解任何關係型數據庫存儲數據的實現細節。框架
其餘.NET ORM框架:組件化
- PetaPoco :
與完備的ORM框架不一樣,PetaPoco更加註重易用性和性能。使用PataPoco只須要引入一個C#文件,可使用強類型的POCO(Plain Old CLR Object),並支持 T4 模板生成的類等。此外,因爲PetaPoco是開源項目,所以添加條件來處理如空間數據等特定狀況會很容易。- Dapper :
性能方面高於PetaPoco,速度只稍遜於手工編碼的數據訪問層(DAL、Data AccessLayer),還有一些對初學者會有幫助的、位於官網上的系列博文和一些獨立博文教程。
0.建立完成後,項目會默認引入兩個命名空間:EntityFramework、System.Data.Entity性能
1. 最外層爲.edmx文件,EF模型設計器,展現從數據庫建立的模型,包括:表名、屬性(表字段)、導航屬性(外鍵、表與表之間的對應關係)、表與表之間1對一、1對多的關係。網站
2. Model1.Context.tt、Model.Designer.cs、Model.edmx.diagram、Model1.tt編碼
1). Model1.Context.tt:包含Model1.Context.cs
Model1.Context.tt由T4模板生成,不可更改,Model1.Context.cs繼承自DbContext,包括構造方法(繼承自父類的構造方法,並在此傳遞配置文件的數據庫鏈接字符串)、各個表所對應的Dbset<T>類型的自動屬性。
2). Model.Designer.cs:自動生成,無需更改
3) . Model.edmx.diagram:描述edmx文件的元素信息(名稱、位置……)
4). Model1.tt:包含生成的Model.cs,自身由T4模板生成,無需修改
查詢
1 StudentMISEntities stu = new StudentMISEntities(); 2 //IQueryable<Users> userInfoList=from u in stu.Users 3 var userInfoList = from u in stu.Users 4 where u.id == 10 5 select u; 6 foreach (var item in userInfoList)//EF延遲加載機制,數據用到的時候纔去數據庫中查詢,不用的時候不去查詢,提升程序性能 7 { 8 Response.Write(item.uName); 9 }
增長
1 Users userInfo = new Users(); 2 userInfo.uName = "2333"; 3 userInfo.uPassword = "123"; 4 userInfo.uRole = "學生"; 5 6 StudentMISEntities stu = new StudentMISEntities();//建立EF數據操做類實例 7 stu.Users.Add(userInfo);//把數據添加到EF,並添加標記 8 stu.SaveChanges();//把數據保存到數據庫
修改
StudentMISEntities stu = new StudentMISEntities(); var userInfoList = from u in stu.Users where u.id == 16 select u; Users userInfo = userInfoList.FirstOrDefault();//返回第一個元素,若是沒有的話,返回null if (userInfo!=null) { userInfo.uPassword = "12345678"; stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Modified;//添加修改標記 stu.SaveChanges(); Response.Write(userInfo.uPassword); } else { Response.Write("要修改的數據不存在"); }
刪除
1 StudentMISEntities stu = new StudentMISEntities(); 2 var userInfoList = from u in stu.Users 3 where u.id == 17 4 select u; 5 Users userInfo = userInfoList.FirstOrDefault();//返回第一個元素,若是沒有的話,返回null 6 if (userInfo!=null) 7 { 8 //stu.Users.Remove(userInfo); 9 stu.Entry<Users>(userInfo).State = System.Data.Entity.EntityState.Deleted;//添加刪除標記 10 stu.SaveChanges(); 11 Response.Write("已刪除"); 12 } 13 else 14 { 15 Response.Write("要刪除的數據不存在"); 16 }