ADO.Net EF Start (2):Overview

來源:互聯網
上載者:User

轉載自:http://www.cnblogs.com/ruciffa/articles/1087889.html

背景簡介

我想在很長一段時間內,MS的三個產品將是一個話題吧,也是一個未來方向上的熱點。就是將在VS 2008 SP1當中發布的ADO.NET Entity Framework, 在.NET 4.0中將要發布的ASP.NET MVC,以及剛剛推出了2.0版本,並且將一直進化的SilverLight. 前兩者將彌補MS產品線上的空白,或者說以前MS產品當中存在著的一些缺陷,而第三個將使MS踏入新的RIA領域.

ADO.NET Entity Framework彌補的MS一直都沒有介入的持久層技術市場。從背景上來說,持久層架構解決的是關係型資料庫和程式模型之間的不匹配性。程式模型更加貼近我們的實際應用,我們需要很多模型來供我們來使用,從而類比我們的商務邏輯。我們需要程式模型實體之間的封裝,多態,組合,繼承,多對多等關係。這樣的物件導向的與我們日常生活和思考模式比對的模型才能更好的實現我們的業務。但是我們的資料庫卻不是物件導向的,資料庫是關係型的,它是無法實現物件導向模型當中一些諸如整合和組合的關係的。所以在資料庫的發展遲遲沒有突破性進展的情況下,我們的選擇只能是使用持久層架構來做中間轉換,消除資料庫和我們程式模型的不匹配性。在java技術平台上,Hibernate作為最為我們常用的持久層架構已經發展了很長一段時間。但在MS技術平台上,除了NHibernate這個模仿品外,一直沒有類似功能的架構產生,這對於追求任何技術都最好MADE IN MICROSOFT的MS來說,無疑是相當不爽的事情。

ADO.NET Entity Framework就是這麼一個背景下將要推出的架構。可以說從ADO到ADO.NET,再到ADOEF, MS對於程式和資料庫之間的中介層技術完成了從輕量級的工具到重量級的架構的轉變,而MS特有的易用性依舊。

ADO.NET Entity Framework的組成

首先是建模的Schema,用於將程式模型和資料庫實際模型通過映射關係串連起來

1. Conceptual Schema(CSDL):用於在程式層面上的建模,直接建立物件導向的各種模型

2. Storage Schema(SSDL):用來描述資料庫裡面的實際情況。

3. Mapping Schema(MSL):作為前面兩個層次的中介層,來描述兩者之間的映射關係。

然後是提供了對於建模後的資料的訪問方式

1. Entity SQL: 改進後的T-SQL語句

2. Object Service:提供了類似於以前在ADO.NET當中使用connection,command,data adapter,dataset來訪問資料的方式,估計要照顧以前開發人員訪問ADO.NET的習慣。

3. LINQ TO Entity

最後是提供了IDE工具,一個Entity Designer,來方便地建立模型。

LINQ Technology

很多人都認為.NET Framework 3.5其實只是個半成品,真正完成進化的將是4.0, 的確,從3.0到3.5唯一的加強就是LINQ技術的發布,遠遠不如當初從2.0到3.0的變化大,當初引入的讓人眼前一亮的WCF, WPF, WWF, Cardspace, ASP.NET AJAX, C# 3.0等技術,相對於以前版本都是相當大的革新。ADO.NET Entity Framework要在SP裡面發布,而SilverLight遠遠沒有成熟,ASP.NET MVC還在beta版,可能這些東西完成版本才會在4.0裡面整合,現在的.NET Framework 3.5隻是一個過渡的產品。

談到唯一的進化 - LINQ技術的話,這方面的考慮可能MS是比JAVA領先一步的,以前從來把資料讀寫當作tool層面的小技術的MS已經開始把其當作VS當中專門的一個模組。現在的LINQ有LINQ TO Object(記憶體中資料的讀寫),LINQ TO XML(XML檔案中資料的讀寫),以及LINQ TO ADO.NET(資料庫層面上的讀寫). LINQ TO ADO.NET又包括了三個子模組,LINQ TO DataSet(DataSet資料的讀寫),LINQ TO SQL(針對於SQL Server資料庫的讀寫),以及LINQ TO Entity。

LINQ TO Entity其實是直接讀寫程式模型,它要和ADO.NET Entity Framework配合使用,它讀寫的是ADO.NET Entity Framework建模出來的程式模型,LINQ TO Entity的本質是直接讀寫ADO.NET Entity Framework資料的一種訪問方式。它忽略了資料庫層面,直接存取了程式模型層面。

很多人都問過一些問題,比如為什麼LINQ TO SQL無法實現繼承,多表組合,多對多等關係啊,要怎麼實現這些個複雜關係啊。其實從設計上而已,LINQ TO SQL就無法實現這些,真正能夠實現這些關係的是ADO.NET Entity Framework和LINQ to Entity。

LINQ TO SQL不支援多表繼承,包括一實體一具體表的繼承體制和一實體一擴充表的繼承體制。LINQ TO SQL只支援單表的繼承,即用一張資料庫表格儲存體整個繼承體系中所有實體的資料,簡單來說就是按照同一個屬性來產生不同的類的那種繼承。LINQ TO SQL是一個tool層面上的技術,可以實現輕量級和快速的資料庫訪問開發。為資料庫產生其對應的Entity Class。但是如果你想實現比更複雜的映射關係和繼承關係,只能使用預定將要發布的ADO.NET Entity Framework以及LINQ TO Entities。

ADO.NET Entity Framework並不包括在目前的VS 2008 RTM版本當中,可能會在2008年中作為VS的Service Pack發布,它是一個ORM層面上的架構,可以實現目前LINQ TO SQL無法實現的諸如Many-to-Many的關係映射,Entity的 Inheritance,Single Entity From Multiple Tables等更為複雜的關係。

兩者的不同地方在於,你使用LINQ to SQL的時候,你的映射,產生的CLR/.NET類是和你的資料/資料庫模型緊耦合或綁定的,如果你改變物件模型,那麼你要直接修改這些類,同樣如果資料模型改變,你要使用重建對象代碼,而ADO.NET Entity Framework在資料/資料庫模型上建立一個概念層/實體層,這使得你要先定義概念層/實體層,接著建立資料/資料庫的指令碼(描述),然後在一個影射層建立你的實體和資料之間的邏輯映射,這使得業務和資料來源之間有了很好的藕合度和隔離。而LINQ to SQL無法達到這樣的效果,所以LINQ to Entities和ADO EF的聯合使用就能提供實體的繼承,實體的組合等等

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.