2009-11-08 100 views
5

許多產品開發人員都希望編寫一個.NET應用程序,該應用程序可以與任何流行的RDBMS(如SQL Server,Oracle,DB2,MySql)無縫協作。如果我們使用Data應用程序塊,它會根據配置動態選擇數據庫驅動程序(OracleClient,SQLClient或OleDBClient)。數據庫中性.NET應用程序

但是,所有數據庫都有自己的SQL風格。有一些細微的差異,可以防止一個SQL代碼庫被普遍使用 - 函數名稱不同,日期處理方式不同,Identity列處理方式不同等等。

人們可以使用第三方產品從數據直接使用預定義的轉義序列寫DB中立的代碼。

是否有任何工具或產品來自Microsoft解決此問題?

回答

12

Microsoft ADO.NET Entity Framework是來自Microsoft的Object-Relational Mapping框架,該框架旨在讓您編寫(某種程度上)與數據庫無關的代碼。所有主要的數據庫管理系統都支持實體框架,儘管對於很多(例如MySQL,Postgres),你需要從.NET Framework安裝中單獨下載一些東西。

注:我還沒有使用O/RM工具,我們不得不掏出來本地SQL--無論是DB-特定功能或那裏是不是至少有一次在一個單一的大項目合作性能方面的原因(需要以特定的方式編寫查詢以獲得良好的查詢計劃)。但是一個好的O/RM可以在大多數情況下工作,以防止編寫SQL。

這就是說,實體框架的當前版本中的數dimensions--其他O/RM框架等NHibernateSubSonic等是相當有限的是成熟得多,其中「成熟」是指支持更深的範圍的數據庫管理系統的功能,而不必掏出原生SQL,更廣泛的社區支持,更好的性能等。

這是我的禮貌的說法,對於一個真實世界,相對複雜的項目,我不認爲當前版本的實體框架是與其他可用O/RM工具相關的最佳方式。

顯然,即將到來的.NET 4.0/VS2010 version of the Microsoft Entity Framework大爲改善,所以上面的語句,可能不是真的明年。例如,新的實體框架添加了對DDL的支持,因此您可以使用獨立於DBMS的方式創建表和索引。另外,.NET 4.0 Entity Framework利用了一個叫做T4 Templates的酷炫功能,這是一個很好的功能,可以在構建時自動生成代碼,這對於需要保持與外部同步的O/RM包裝器很重要數據庫模式 - 與O/RM工具相比,它們在運行時不知道數據庫列的類型時應該產生更好的性能(即預編譯)性能。

+0

+1一個好的和全面的答案。值得注意的是,目前EF只支持RDBMS。這就是OP詢問的內容,所以我的答案沒有問題,但我只想指出,如果您突然需要通過RESTful服務訪問數據,或者沒有其他關係,EF不會幫助您數據源。 – 2009-11-08 17:52:46

+0

EntityFramework不支持Informix(撒旦自己的數據庫) – 2009-11-09 11:23:51

1

不直接來自Microsoft。這些工具通常被稱爲對象關係映射器或簡稱ORM。舉個例子,NHibernate是一個非常有用的ORM,它非常適合你的需求。當然,還有其他商業產品,如Telerik OpenAccess ORM,DevExpress XPO或RemObjects DataAbstract,它們將幫助您成爲數據庫不可知論者。

+0

*有*直接來自MS的ORM:實體框架。 – 2009-11-08 16:20:17

+0

ORM的另一個方面不僅僅是可以使用的「標準」SQL,還包括可以節省的大量樣板代碼(交易和LOB處理,僅舉兩例)。 – davek 2009-11-08 16:43:18

2

正如我理解你正在尋找工具編寫RDBMS無關的SQL,但不是ORM。這是不同ORM供應商以不同方式解決的實際問題。我只想提及XtensiveSQL DOM工具,它是爲他們的ORM開發的 - DataObjects.Net。它是SQL的一種抽象,允許使用全功能DOM模型編寫查詢。目前,SQL DOM並不是從DataObjects.Net單獨推廣的,但它是一個開源產品,您當然可以向其作者詢問它。據我所知,它已成功用於一些第三方項目。

相關問題