首先說一下ORM吧
以下為網上搜尋到的概念描述,詳細而準確
對象-關係映射(Object/Relation Mapping,簡稱ORM),是隨著物件導向的軟體開發方法發展而產生的。物件導向的開發方法是當今企業級應用開發環境中的主流開發方法,關聯式資料庫是企業級應用環境中永久存放資料的主流資料存放區系統。對象和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關係資料。記憶體中的對象之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,對象-關係映射(ORM)系統一般以中介軟體的形式存在,主要實現程式對象到關聯式資料庫資料的映射。
物件導向是從軟體工程基本原則(如耦合、彙總、封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為瞭解決這個不匹配的現象,對象關係映射技術應運而生。
讓我們從O/R開始。字母O起源於"對象"(Object),而R則來自於"關係"(Relational)。幾乎所有的程式裡面,都存在對象和關聯式資料庫。在商務邏輯層和使用者介面層中,我們是物件導向的。當對象資訊發生變化的時候,我們需要把對象的資訊儲存在關聯式資料庫中。
當你開發一個應用程式的時候(不使用O/R Mapping),你可能會寫不少資料訪問層的代碼,用來從資料庫儲存,刪除,讀取對象資訊,等等。你在DAL中寫了很多的方法來讀取對象資料,改變狀態物件等等任務。而這些代碼寫起來總是重複的。
如果開啟你最近的程式,看看DAL代碼,你肯定會看到很多近似的通用的模式。我們以儲存對象的方法為例,你傳入一個對象,為SqlCommand對象添加SqlParameter,把所有屬性和對象對應,設定SqlCommand的CommandText屬性為預存程序,然後運行SqlCommand。對於每個對象都要重複的寫這些代碼。
除此之外,還有更好的辦法嗎?有,引入一個O/R Mapping。實質上,一個O/R Mapping會為你產生DAL。與其自己寫DAL代碼,不如用O/R Mapping。你用O/R Mapping儲存,刪除,讀取對象,O/R Mapping負責產生SQL,你只需要關心對象就好。
一般的ORM包括以下四部分:
一個對持久類對象進行CRUD操作的API;
一個語言或API用來規定與類和類屬性相關的查詢;
一個規定mapping metadata的工具;
一種技術可以讓ORM的實現同事務對象一起進行dirty checking, lazy association fetching以及其他的最佳化操作。
(1) 廣義上,ORM指的是物件導向的物件模型和關係型資料庫的資料結構之間的相互轉換。
(2) 狹義上,ORM可以被認為是,基於關係型資料庫的資料存放區,實現一個虛擬物件導向的資料提供者。理想情況下,基於這樣一個物件導向的介面,持久化一個OO對象應該不需要瞭解任何關係型資料庫儲存資料的實現細節。
以下為個人見解,簡單而實用
推崇物件導向編程已多年,現狀資料存放區都是關係型資料庫,而不是對象資料庫,於是,程式與資料中間自然而然就產生了一條鴻溝,以往做軟體開發的人,除了要學習程式設計語言以外,還要學習資料庫的基本操作,比如安裝、啟動、建立執行個體、刪除執行個體,以及增刪改查庫表和資料,還有相應的資料庫預存程序、函數,而且不同的資料庫,如主流的oracle、Sql Server、MySql、DB2各不相同,額外帶來了很多要學習和掌握的東西,對象關係映射架構因此產生了,可以自動實現程式上的對象與資料庫中的儲存映射,從而隔絕了資料庫儲存的細節,編程人員更多的關注編程就可以了,不需要瞭解資料庫的細節。
Entity Framework簡介
之前聽說過JAVA領域中的大名鼎鼎的Hibernate,也知道有個移植到NET這邊的開源的NHibernate,微軟推出了自己的ORM架構Entity Framework。
關於什麼是Entity Framework,還是先複製一段部落格園Entity Framewor專題的概要介紹吧,感覺簡單明了
Entity Framework的全稱是ADO.NET Entity Framework,是微軟開發的基於ADO.NET的ORM(Object/Relational Mapping)架構。
Entity Framework的主要特點:
1. 支援多種資料庫(Microsoft SQL Server, Oracle, and DB2);
2. 強勁的映射引擎,能很好地支援預存程序;
3. 提供Visual Studio整合工具,進行可視化操作;
4. 能夠與ASP.NET, WPF, WCF, WCF Data Services進行很好的整合。