天天看點

【ASP.NET】MVC5 + EF6(一)

什麼是EF架構 ?

EF 全稱是 EntityFramework 。Entity Framework是ADO.NET 中的一套支援開發面向資料的軟體應用程式的技術,是微軟的一個ORM架構。

ORM架構(Object Relational Mapping) 翻譯過來就是對象關系映射。

【ASP.NET】MVC5 + EF6(一)

EF實體架構整體架構:

【ASP.NET】MVC5 + EF6(一)

架構元件:

EDM(實體資料模型): EDM由三個主要部分組成 - 概念模型,映射和存儲模型。

Conceptual Model:概念模型包含模型類及其關系。這将獨立于您的資料庫表設計。

Storage Model:存儲模型是包括表,視圖,存儲過程及其關系和密鑰的資料庫設計模型。

Mapping:映射由有關概念模型如何映射到存儲模型的資訊組成。

LINQ to Entities: LINQ to Entities是一種用于針對對象模型編寫查詢的查詢語言。它傳回在概念模型中定義的實體。你可以在這裡使用你的LINQ技能。

Entity SQL:實體SQL是另一種查詢語言(僅适用于EF 6),就像LINQ to Entities一樣。然而,這比L2E稍微難一些,開發者需要單獨學習。

ObjectServices:對象服務是通路資料庫中的資料并将其傳回的主要入口點。對象服務負責實作,這是将從實體用戶端資料提供者(下一層)傳回的資料轉換為實體對象結構的過程。

Entity Client Data Provider:此層的主要職責是将LINQ-to-Entities或實體SQL查詢轉換為底層資料庫可以了解的SQL查詢。它與ADO.Net資料提供者通信,而ADO.Net資料提供者又從資料庫發送或檢索資料。

ADO.Net Data Provider:該層使用标準的ADO.Net與資料庫進行通信。

EF 的優勢(與 ADO.NET 的對比)

  • 【邏輯】業務邏輯和資料存取邏輯分離開來;
  • 【新增操作】 EF:一次連接配接,執行多條sql;SqlHelper裡使用一般寫法,連接配接又無法釋放,用using,會造成多次連接配接重置;
  • 【更新操作】 EF自動優化,隻update set 有變化的字段,EF也可以很友善地隻更新 實體的指定屬性,産生的sql語句裡的set後的字段會更少;
  • 【智能提示】 用linq, lamda表達式 有智能提示,寫錯了編譯不過;寫sql語句字元串,調sqlhelper,sql語句寫錯一樣編譯通過;
  • 【安全】 省去了防止sql注入的麻煩;
  • 【資料庫變更】使用EF,切換較友善;
  • 【效率】 使用EF要比使用Ado.net開發效率高;
  • 【可讀性】 代碼的可讀性更高.

EF架構的三種模式

Database First(資料庫優先)

如果已經擁有資料庫,Visual Studio中内置的Entity Framework設計器可以自動生成一個資料模型,該模型由對應于現有資料庫對象(如表和列)的類和屬性組成。有關資料庫結構,資料模型及映射之間的資訊以XML格式存儲在.edmx檔案中。實體架構設計器提供了一個可視化界面,您可以使用它來顯示和編輯.edmx檔案。

Model First(模型優先)

如果您還沒有資料庫,則可以使用Visual Studio中的Entity Framework設計器在.edmx檔案中建立一個模型。當模型建完後,可以執行.edmx檔案來建立資料庫。

Code First(代碼優先)

無論您是否擁有資料庫,都可以使用Code First。如果沒有資料庫,可以編寫類和對應于表和列的屬性。如果有資料庫,那麼Entity Framework可以生成與現有表和列對應的類和屬性。如果使用Code First建立資料庫,則可以使用“migration(遷移)”來将資料庫部署到生産環境。當資料模型更改時,可以将更改部署到生産環境中,而不改變原有的資料

更多了解:https://docs.microsoft.com/zh-cn/ef/ef6/