步步深入EF(一) EF原理

2021-06-27 14:18:06 字數 3561 閱讀 4407

一、什麼是ef?

實體架構(

entity framework

)是微軟以來

ado.net

為基礎開發出來的物件關係對映(

orm)解決方案,它解決了物件持久化問題,將程式設計師從編寫麻煩的

sql語句中解放出來。

優點:支援多種資料庫(

microsoft sql server

、oracle

和db2

等);強勁的對映引擎,能很好地支援儲存過程;

提供visual studio

整合工具,進行視覺化操作;

能夠與asp.net

、wpf

、wcf

、wcf data services

進行很好的整合。

二、orm

常見orm框架:

orm不是產品,是框架的總稱,物件導向的程式語言到關聯式資料庫的對映。

使程式設計師既可以利用物件導向語言的簡單易用性,又可以利用關聯式資料庫的技術優勢來實現應用程式的增刪改查操作。

1. nhibernate:hibernate在.net平台下的版本

2. ibatis.net:ibatis在.net平台的實現

3.linq to sql(微軟不再更新):.net針對sql server的orm框架

4.ado.net entity framework:微軟在.net4.0推出的領域驅動開發模型。

注意:ado.net entity framework是微軟以ado.net為基礎所發展出來的物件關係對映解決方案,只不過是對ado.net進行了乙個更高層次的封裝。

產生背景:

1、重複的運算元據庫**

我們使用三層架構時,使用的是

ado.net

訪問資料庫,我們將

ado.net

對資料庫的操作封裝在乙個

sqlhelper

中,然後通過

d層呼叫

sqlhelper

實現對資料庫的操作。即使使用

sqlhelper

進行封裝,我們的資料訪問層(

dal),還是要針對不同的業務重複很多增、刪、改、查操作。只是因為操作的表不同,我們就去重複這些增刪改查操作,那麼有沒有什麼工具可以自動生成這些語句?

2、影響擴充套件性和靈活性

資料訪問層同時與域模型和關聯式資料庫模型繫結,不管域模型還是關聯式資料庫模型發生變化,都要修改資料庫訪問層的相關程式**,增加了軟體的維護難度。

定義:

orm全稱:

orm解決的主要問題是物件關係對映。一般情況,實體與我們庫中的表的對應關係,乙個實體就好比表中的一行資料,將實體的操作視為對錶的操作,通過

orm模型對我們的**更加簡潔,我們將對資料庫的操作通過

orm轉換後執行,

orm模型確實為我們的開發提高了效率。

結構

通過該圖,可以看出,

o對應程式中的類customer,就是物件,

r含義為relation,對應資料當中的關係表

通過該圖,我們可以看出業務實體,在資料庫中表現為關係資料,而在記憶體中表現為物件。應用程式處理物件很容易,但是很難處理關係資料。orm做到了關係資料和物件資料之間的對映,orm可以通過對映關係自動產生sql語句,orm在業務邏輯層和資料層之間充當橋梁。

優點:

1.物件導向

不用sql直接編碼,就可以向操作物件一樣運算元據庫2.

提高開發效率

orm可以自動對實體物件與資料庫中table進行欄位與屬性的對映,不需要單獨的資料訪問層。3.

方便轉移   

當資料庫發生改變時,不需要對模型進行改動,只需要修改對映關係就可以了。

缺點:

會犧牲程式的執行效率

複雜的程式orm低於sql語句

使用場合:

1、orm使我們擺脫了sql,但並不代表我們不再使用sql,事實上,複雜的查詢和報表我仍然推薦使用sql,良好的系統應該可以相容以前的方式;

2、orm更適合複雜的系統(這裡使用複雜,而不是大型),因為這樣的系統要求建造速度快,系統穩定,他們的業務規則異常的複雜,但他們對系統的效能要求並不

3、開發時間緊迫時

4、有資料庫遷移需求時

三、net應用程式訪問資料庫的方式

1.手寫**通過ado.net類庫

2.dataset結合dataadapter結合

3.orm

orm解決方案:

linq to sql

ef:資料庫的er模型可以完全轉換成物件模型

四、ef例項

ef體系結構

物件關係對映

資料庫中有使用者表、工作表

第一步:系統向資料庫中插入一條資訊,這時記憶體中有

user

物件第二步:物件和資料庫怎樣通訊,即怎樣將物件放到資料庫

需要xml

配置檔案進行配置,儲存對映關係

第三步:需要對映關係,使用

relation

(對映到表中每個字段),

最後可生成完整的

sql語句

object:代表系統中對應的表

table:代表資料庫中的表,其中包含表中的各個字段

注意:orm

框架採用元資料來描述物件一關係對映細節,元資料一般採用

xml格式,並且存放在專門的物件一對映檔案中。只要提供了持久化類與表的對映關係,

orm框架在執行時就能參照對映檔案的資訊,把物件持久化到資料庫中。

在系統中的體現:

ssdl

:資料庫(資料表)

csdl:c#

(類)c-s

:類和表的對映關係

步步深入EF(二) 延遲載入

ef延遲載入 就是使用lamabda表示式或者linq 從 ef實體物件中查詢資料時,ef並不是直接將資料查詢出來,而是在用到具體資料的時候才會載入到記憶體。很多資料講的ef原理,只是延遲查詢資料,是這樣嗎?ef本質究竟是什麼呢?1 延遲生成 sql語句 生成的sql語句不確定 2 按需載入 針對於...

EF深入系列 細節

在context類的建構函式中新增以下 就可以在除錯的時候在 輸出 視窗中看到sql語句 this.database.log s system.diagnostics.debug.writeline s ef中有三種方式處理關聯實體的資料載入 預載入,懶載入,顯示載入 現在有兩個類 public c...

EF原理剖析一 如何實現ORM

最近專案中用到了ef,初次接觸,使用了基本的增刪改查。而對於ef底層的原理,卻沒有了解的透徹。俗話說,知其然,還要知其所以然。注意 orm框架採用元資料來描述物件一關係對映細節,元資料一般採用xml格式,並且存放在專門的物件一對映檔案中。只要提供了持久化類與表的對映關係,orm框架在執行時就能參照對...