介紹

Object Relational Mapping, ORM,一種將關聯式資料庫轉換對應成為物件的抽象化技術,
好處是可以讓開發者直接使用物件導向方式對資料庫進行操作,只需要一套語法,不需要
直接面對各家資料庫,進而降低切換資料庫所需要做的工。 對於工程師來說,在開發上能
夠減少不少時間。

下列我們簡單比較 ADO .Net 與 Entity Framework 的差異:

ADO .Net
必須初始化連線,直接輸入SQL語法對資料庫進行操作,開發者需要自行組裝SQL語法與
參數。如下圖所示,建立連線後,取回離線資料庫到容器後,再進行後續的邏輯運算。



Entity Framework
使用類似 SQL 的 linq 語法進行操作,取得對應的資料庫物件後,直接對物件內容進行操作。
有別於ADO .Net可以直接執行語法,Entity Framework 新增、修改與刪除等行為不會立課執
行,而是透過saveChange()語法,讓物件對資料庫進行更新。另外,您可以透過建立物件之
間的關係,更新多個資料表。

雖然使用 Entity Framework 不需要組裝 SQL 語法與參數來更新資料庫內容,但必須將
ViewModel 內容對應至資料庫物件,再由資料庫物件更新資料庫。這部分的對應可以考慮
使用auto mapper套件。


使用Entity Framework的開發方式有三種:Code First、 Model First與Database First ,
個人只使用過 Database First 與 Code First。
  1. Database First
    由資料庫產生模型,每次資料庫schema變動時,都必須更新 ADO Model。
    常見於較嚴謹、複雜與資料量大,必須透過DBA管理的資料庫所開發的應用程式使用。
    好處:嚴謹的資料庫結構,讓開發者不需要考慮資料庫效能等相關問題。
    壞處:每次資料庫變動都需要更新模型。
  2. Code First
    使用程式碼定義模型後,再建立資料庫。
    好處:對於開發者來說,開發速度頗快。
             隨時可以重新產生資料庫進行測試,不用擔心錯誤操作造成問題。
    壞處:很容易沒有顧慮到資料結構與關聯性,造成資料庫問題。
              多人分工環境下,需要處理database migration問題。
              要寫產生資料程式。
這篇的內容較短,目的只是先帶入與說明一個簡單概念。後面兩篇我們將使用local db,
教學如何使用 Database First 建立資料庫物件Code First 如何產生資料庫,然後在
Linq、Lambda 與 System.Linq.Enumerable 方法 這篇簡單介紹如何使用linq操作物件。


感想

每個人學習程式設計的過程不同,回想起開始自己第一個網站與資料庫程式(PHP+MySQL)
,必須安裝與設定ODBC driver 後,透過 library 建立資料庫連線,執行一些SQL後將回傳
資料取出後進行運用,最後要記得關閉連線。後來慢慢接觸 一些些 jsp 與 asp,發現操作過
程相似。

第一次接觸Hibernate,一直摸不著頭緒為什麼要這麼作,原先方法使用久了,剛接觸ORM
反而覺得不能適應 (沒辦法,維護專案仍舊要依循架構,硬著頭皮學 )。 等到習慣後,漸漸
發現ORM的好,反而覺得舊有的方法在大型專案中難以維護。

隨著幾年前轉到ASP .Net MVC,從NHibernate 轉到 Entity framework,漸漸發現回不去了。
但好景不常,某些專案複雜的資料處理,在某些情境下也是需要執行SQL scripts 或執行
Stored Procedure 才能進行處理,真是一路曲折離奇 !

慢慢的接觸了Code First,覺得爽度頗高,但也開始接觸了一些database migration的問題。
在短短的幾年內自己學習過程變化頗大,許多新事物越來越方便,但面臨的問題也越來越
新穎。




本篇文章內容歡迎分享,轉載與使用圖文請來信告知並註明出處。