【EF系列】EntityFrameWork實體關係對映
一、前言
在我們搭建框架的時候,總會建立一個”實體層“,這個實體層中的“實體”是和資料庫中的“表”相對應的。當寫實體層的時候就要我們手動寫很多結構相似的程式碼。非常的繁瑣。為此,小編向大家推薦一種機構——EntityFrameWork,簡稱EF。
二、ORM
在介紹EF之前,小編要給大家介紹一下它的父親——Object Relational Mapping,簡稱ORM,物件關係對映。
大家看著名字都是英文,是不是覺得很難理解,反正我的感覺是不好理解。但是,微軟為大家提供這個服務,總會有例項。簡單的說:ORM相當於中繼資料。具體到產品上,例如ADO.NET Entity Framework。DLINQ中實體類的屬性[Table]就算是一種中繼資料。
什麼又是中繼資料呢?如果沒聽說過,大家可能聽說過”中繼器“,中繼器的作用是對訊號進行再生和還原的網路裝置。對就是再生的作用。所以ORM的作用就是再生資料。(學習要有三級聯查的習慣,遇到不會的就要動手查。)
再用比較官方的語言表達一下,
跟蹤實體變化,並翻譯成SQL指令碼,執行到資料中去,實體變化對映表的變化。
ORM方法論基於三個核心原則:
簡單:以最基本的形式建模資料。
傳達性:資料庫結構被任何人都能理解的語言文件化。
精確性:基於資料模型建立正確標準化了的結構。
圖一 ORM
三、EF對映
前文中已經說到EF對映是ORM的一種具體的工具。
下面給大家分析一下EF的原理:
其實Entity Framework的底層也是呼叫Ado.Net,它是更高層次的封裝.作為資料訪問的技術,EntityFramework的設計有高擴充套件性,這一點可體現在其對映定義的靈活性.簡單地說,使用Entity Framework可以充分地定義與資料庫表對映的實體,這個實體可以直接用於業務邏輯層或作為服務的資料契約.使用EF後,可以將實體類的設計工作完全放在EDM的設計過程中,而不需要手工寫那些大同小異的程式碼,令人欣喜的是這個實體模型可以在執行時修改並生效,做到一改全改.我們開發時也不用再頻繁地與資料庫打交道,我們操作實體模型的同時EF框架自動完成了對資料庫的操作.
它可以分成三類:
這三種會在以後的部落格中依次介紹。
先分別介紹一下這三種方法的聯絡:
1.Database First是基於已存在的資料庫,利用某些工具(如VS提供的EF設計器)建立實體類,資料庫物件與實體類的匹配關係等,你也可以手動修改這些自動生成的程式碼及匹配檔案。也就是從一個數據庫開始,然後生成實體框架和相應程式碼。
2.Model First 是先利用某些工具(如VS的EF設計器)設計出視覺化的實體資料模型及他們之間的關係,然後再根據這些實體、關係去生成資料庫物件及相關程式碼檔案。
3.Code First 這種方式需要先寫一些程式碼,如實體物件,資料關係等,然後根據已有的程式碼描述,自動建立資料物件。但其實這種方法與Model First是非常類似的。我們自己寫的程式碼,其實就是用程式碼表示實體模型,而Model First是用視覺化的方式描述了實體模型。
下面分析這三種方式的優缺點:
Database-First模式明顯效能會差點,但是它很適合初學者,或者是比較急的小型專案。還有一點,我們在做專案時可能不容易體會到它的好處,但如果做資料庫結構比較成熟穩定的產品時,我們可以很輕鬆的使用資料庫生成實體模型,從而實現快速開發。
Model-First模式優點是開發人員能夠在模型設計完成後,可以利用VS等工具快速生成資料庫指令碼。缺點是設計模型時完全瞭解資料庫的結構,在模型中手動新增表關係,並且生成的指令碼有點不簡潔。
Code-First模式優點是效能比較好,且程式碼較少冗餘。不過它的缺點也有很多,由於都是程式碼編寫的,比如更新資料庫。
四、總結
EF是一個很好的機構,可以讓我們的程式碼簡練,還可以提高我們程式碼的拓展性。掌握好這三種方式會更好的提高自己。加油~~