目前分類:O/R Mapping (2)

瀏覽方式: 標題列表 簡短摘要

一、NHibernate簡介

什麼是NHibernate?

文章標籤

Jimmy 發表在 痞客邦 留言(1) 人氣()

ASP.NET Entity Framework是一個Object/Relational Mapping(ORM)的解決方案,可以將用來和客戶溝通用的概念模型(Conceptual Model,又稱Domain Model)與資料庫中的資料表與關聯所構成的儲存模型(Storage Model,又稱Logical Model),進行妥適的對應(Mapping),形成所謂的Entity Data Model。 Entity Data Model是一個以XML為基礎的檔案,附檔名為.EDM。Visual Studio 2010有提供視覺化的designer工具,程式設計師可以先產生EDM檔案,再自動生成資料庫;如果資料庫已事先建立好,亦可以由現有的資料庫來生成EDM檔案。前者即所謂的Model First模式,而後者為Database first。不過,目前ADO.NET Team在CTP已釋出另一種稱為Code First的模式,Code First基本上是一種Model First模式,只是Code First並不需要使用視覺化的designer工具先生成Model,而是直接在程式定義Domain Model,並使用Code First相關的API及基礎類別,當程式執行時由Entity Framework自動判斷底層的資料庫是否存在,以及schema是否一致;如果資料庫不存在,則Entity Framework會自動建立資料庫。 使用Entity Data Model有一個不錯的優點,即當使用的儲存方式(persistence)改變時(如Access換成SQL),只要改變Storage Model及對應(Mapping)即可,不需要修改Conceptual Model。由於Conceptual Model就是應用程式的Domain Model,並且以Object Layer的方式呈現,這代表著儲存方式的改變可以不需要修改程式碼。 不過,如果使用Visual Studio 2010的designer自動生成Entity Data Model,其生成的Conceptual Model與儲存方式仍有相當高的關聯性;因此,自動生成之Conceptual(Domain) Model可以由程式設計師自行定義類別的方式來加以擴展。一般而言,以自行定義類別方式來擴展Conceptual Model都是使用.NET框架所提供的基本型別來定義類別,這也就是所謂的POCO物件(Plain-Old CLR Objects)。需要注意的是,POCO類別的定義有一定的命名慣例(convention over configuration),要繼承的類別以及需實作的介面(interface)也有特別的規定。 另外,Entity SQL或LINQ都可以對Conceptual Model的物件進行查詢。Entity SQL雖然與關聯式資料庫的SQL相似,但Entity SQL有自己的資料型別及函數;而LINQ則是語接內建的語法,可以透過compiler自動轉譯成各種不同的查詢,使用上相對較有彈性。 PS. 基本上LINQ的語法應該可以視為array或collection等類型的資料結構處理命令,其功能主要是提供集合(set)的運算,可降低以循序運算來處理集合運算的寫碼負擔。因此,LINQ並沒有太特殊的地方,將LINQ再細分為LINQ to Object,LINQ [...]


Jimmy 發表在 痞客邦 留言(0) 人氣()