Entity Framework Entity Framework綜述
ADO.NET Entity Framework 是微軟以ADO,NET 為基礎所發展出來的對象關係對應的解決方案。
一、產生背景
它是隨著物件導向的軟體開發方法發展而產生的。對象和關係資料是業務實體的兩種表現形式。業務實體在記憶體中表現為對象,在資料庫中表現為關係資料。記憶體中的對象之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此ORM一般以中介軟體的形式存在,主要實現程式對象到關聯式資料庫的映射。像Hibernate或NHibernate都是這個技術下的產物,但微軟沒有這樣的對象對應工具,為了有這樣的工具,微軟開發了ADO.NET Entity Framework.
二、發展曆程
微軟在.NET Framework2.0發展時期,提出了ObjectSpace的概念,其技術與NHibernate相似,但ObjectSpace因為工程相當大所以在.NET Framework 2.0完成時ObjectSpace未完成,因此微軟將它納入下一版本的.NET Framework中,並加上了設計工具(Desinger),構成了現在的ADO.NET Entity Framework.
三、應用情境
用ADO.NET Entity Framework自動為我們產生DAL代碼,ADO.NET Entity Framework可以進行儲存、添加、刪除、修改、讀取對象。ADO.NET Entity Framework負責產生SQL,我們只需要關注對象就好了,而不需費心關注資料庫結構。
四、體繫結構
五、主要模組與類
Entity FrameworkEntity Framework 是 ADO.NET 中的一組支援開發面向資料的軟體應用程式的技術。在EF中的實體資料模型(EDM)由以下三種模型和具有相應副檔名的對應檔進行定義。 概念結構定義語言檔案 (.csdl) -- 定義概念性模型。 存放結構定義語言檔案 (.ssdl) -- 定義儲存模型(又稱邏輯模型)。 對應規格語言檔案 (.msl) -- 定義儲存模型與概念性模型之間的映射。
重要的類:
1、ObjectContext:ObjectContext封裝 .NET Framework 和資料庫之間的串連。此類用作“建立”、“讀取”、“更新”和“刪除”操作的網關。
2、ObjectQuery:有個有用的方法ToTraceString(),這個方法用於追蹤所執行的SQL語句,通過此方法我們可以擷取所執行的SQL語句,以便我們查看、分析具體執行的SQL語句
3、ObjectStateEntry:ObjectStateEntry維護實體執行個體或關係執行個體的狀態(已添加、已刪除、已分離、已修改或未更改)、索引值和原始值。還管理已修改屬性的列表
4、ObjectStateManager:ObjectStateManager用於維護對象映射、對象狀態/標識管理以及實體執行個體或關係執行個體的持久性。
六、CRUD典型的代碼:增、刪、查、改
1、根據學院ID擷取年級列表
_context.Classes.Where(c => c.SchoolID == schoolId).Select(c => c.Grade).Distinct().ToList()
2.根據班級ID擷取班級資訊
return _context.Classes.FirstOrDefault(c => c.ClassID == id)
3、添加班級
_context.Classes.Add(entity);
int i = _context.SaveChanges()
4、刪除班級
_context.Entry<Class>(entity).State=
System.Data.EntityState.Deleted;
int i = _context.SaveChanges()
5、修改班級
_context.Classes.Attach(entity);
_context.Entry<Class>(entity).State=
System.Data.EntityState.Modified
int i = _context.SaveChanges()