2009-11-08 98 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单独推广的,但它是一个开源产品,您当然可以向其作者询问它。据我所知,它已成功用于一些第三方项目。

相关问题