5

许多产品开发人员希望编写一个 .NET 应用程序,该应用程序可以与任何流行的 RDBMS(如 SQL server、oracle、DB2、MySql)无缝协作。如果我们使用数据应用程序块,它会根据配置动态选择数据库驱动程序(OracleClient、SQLClient 或 OleDBClient)。

但是,所有数据库都有自己的 SQL 风格。有一些细微的差异会阻止一个 SQL 代码库被普遍使用 - 函数名称不同,日期处理方式不同,身份列处理方式不同等等。

可以使用 Data Direct 的第三方产品,使用预定义的转义序列编写 DB 中性代码。

Microsoft 是否有任何工具或产品可以解决此问题?

4

3 回答 3

12

Microsoft ADO.NET Entity Framework是来自 Microsoft 的对象关系映射框架,旨在让您编写(在某种程度上)与 DB 无关的代码。所有主要的 DBMS 都支持实体框架,但对于许多(例如 MySQL、Postgres),您需要下载与 .NET Framework 安装分开的东西。

注意:我还没有使用 O/RM 工具处理单个大型项目,其中至少没有一种情况是我们不得不使用原生 SQL ——无论是出于特定于数据库的功能还是出于性能原因(需要以特定方式编写查询以获得良好的查询计划)。但是一个好的 O/RM 可以在大部分时间工作,以防止不得不编写 SQL。

也就是说,实体框架的当前版本在许多方面都非常有限——其他 O/RM 框架,如NHibernateSubSonic等更加成熟,其中“成熟”意味着支持更广泛的 DBMS 功能,而无需不得不使用原生 SQL、更广泛的社区支持、更好的性能等。

这是我礼貌的说法,对于一个真实的、相对复杂的项目,我不认为实体框架的当前版本相对于其他可用的 O/RM 工具来说是最好的方法。

显然,即将发布的.NET 4.0/VS2010 版本的 Microsoft Entity Framework有了很大的改进,所以明年上面的说法可能不成立。例如,新的实体框架增加了对 DDL 的支持,因此您可以以独立于 DBMS 的方式创建表和索引。此外,.NET 4.0 Entity Framework 正在利用一个名为T4 Templates的很​​酷的功能,这是一个在构建时自动生成代码的简洁功能,这对于需要与 O/RM 包装器保持同步的东西很重要外部数据库模式——与在运行时不知道数据库列类型的 O/RM 工具相比,它应该产生更好的(也就是预编译的)性能。

于 2009-11-08T16:11:58.763 回答
2

据我了解,您正在寻找用于编写独立于 RDBMS 的 SQL 的工具,而不是 ORM。这是不同的 ORM 供应商以不同的方式解决的非常实际的问题。我只能提到Xtensive SQL DOM工具,它是为他们的 ORM - DataObjects.Net开发的。它是对 SQL 的抽象,允许使用功能齐全的 DOM 模型编写查询。目前 SQL DOM 并未与 DataObjects.Net 分开推广,但它是一个开源产品,您当然可以询问它的作者。据我所知,它已成功用于一些第三方项目。

于 2009-11-09T11:20:22.033 回答
1

不是直接来自微软。这些工具通常称为对象关系映射器或简称 ORM。例如,NHibernate 是一种常见且广泛使用的 ORM,它肯定能满足您的需求。当然还有其他商业产品,如 Telerik OpenAccess ORM、DevExpress XPO 或 RemObjects DataAbstract,它们将帮助您成为数据库不可知论者。

于 2009-11-08T16:13:23.097 回答