[轉(zhuǎn)]Entity Framework 和NHibernate的區(qū)別
今天在Boy's (小氣的神) BLOG上看到一篇精彩的文章 Astoria to SQLite to Entity Framework to 建立你的ORM觀念 .文章說到了很多精彩的內(nèi)容,從SQLite for ADO.NET 2.0 Data Provider 到 實體框架EF, 還有ORM的概念,列出了ORM的完整視圖:

介紹了ORM的四個方向,即自上而下(Top-down),自下而上(Bottom-up),從里到外(Inside-out),從外向里(Outside-in)。
從個人感受上看,NHibernate顯然是從上而下(Top-down)的方式,天然的POCO支持就是最好的佐證。而ADO.NET Entity Framework目前v1版本,應(yīng)該是從下而上的方式Bottom-up),ADO.NET Entity Data Model Wizard就是最好的佐證。Entity Framework v2支持POCO之后也就能實現(xiàn)垂直雙方向的支持,但這如我后面所說,還不夠。
至于從里到外(Inside-out),從外向里(Outside-in)是真正顯示ORM工具或E/R模型編程模型威力的地方,因為99%的現(xiàn)實世界,以及數(shù)據(jù)庫都不是同步也無法保持同步的,那么提供從里到外,從外向里兩個方向的支持是非常重要的。 其實ORM和DP的存在就是要實現(xiàn)這兩個方向的能力和支持,否則就沒有存在的必要,因為自上而下(Top-down)和自下而上(Bottom-up)兩種方式由來已久,解決這兩個方向的問題,ORM工具或E/R模型編程未必是最好的方式,原因是這兩種方向和思考比較不客觀,那就是假設(shè)現(xiàn)實世界和數(shù)據(jù)有一方是不變的,或是我們自己可以控制的,事實上,這種想法是不現(xiàn)實的。
同樣仔細想想Entity Framework(也許NHibernate也是)在從外向里(Outside-in)方向也提供了支持,這也就是Dsimmons為代表的EF大佬經(jīng)常說的,Entity Framework 不是簡單的ORM工具,它主要是提供一個完全貼近現(xiàn)實的E/R模型,這個模型可以進行數(shù)據(jù)編程(DP),也可以建模和進行數(shù)據(jù)表現(xiàn),最重要的是這個模型可以被共享和重用(目前比較成功的一個案例就是能被ADO.NET Data Service 共享和重用),另外一個方面SQL Server的功能再逐漸增強以及新近的LINQ等數(shù)據(jù)庫+DP的功能混雜和爆發(fā),都在另外一個角度朝從下向上推進,這種情況下Mapping是可以限定在某些功能和場景的,Entity Framework 似乎也是朝這個方向發(fā)展的,事實上,這也是比較可能和有效的發(fā)展思路--從這樣角度來看EF現(xiàn)在的ORM/Mapping方面的不足也就容易理解了。
相反從里到外(Inside-out)的方式,我認為是比較困難的,先假設(shè)我們先擁有一種萬能的Mapping/ORM技術(shù)或工具,然后我們再使用它來連接現(xiàn)實世界/OPP和數(shù)據(jù)存儲/數(shù)據(jù)庫之間的變化和gap,這個。。。。。呵呵,可能是我誤解了。
從上面的描述上可以很清楚的看出Entity Framework和NHibernate的區(qū)別,雖然他們都是ORM工具,他們在ORM的各個方向的側(cè)重是不一樣.
原文: http://blog.csdn.net/shanyou/archive/2008/08/16/4681358.aspx
本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/shanyou/archive/2008/08/16/4681358.aspx
浙公網(wǎng)安備 33010602011771號