数据中立.NET应用程序

时间:2009-11-08 16:06:51

标签: .net orm database-agnostic

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

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

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

Microsoft是否有解决此问题的工具或产品?

3 个答案:

答案 0 :(得分:12)

Microsoft ADO.NET Entity Framework是Microsoft的Object-Relational Mapping框架,旨在让您编写(某种程度上)与数据库无关的代码。所有主要的DBMS都支持实体框架,但对于许多(例如MySQL,Postgres),您需要下载与.NET Framework安装不同的内容。

注意:我还没有使用O / RM工具处理单个大型项目,其中至少有一个案例我们不得不使用本机SQL - 用于特定于数据库的功能或性能原因(需要以特定方式编写查询以获得良好的查询计划)。但是,一个好的O / RM可以在大多数情况下工作以防止编写SQL。

也就是说,当前版本的实体框架在很多方面都非常有限 - 其他O / RM框架如NHibernateSubSonic等等都要成熟得多,其中“ “成熟”意味着支持更深层次的DBMS功能,而不必支持原生SQL,更广泛的社区支持,更好的性能等。

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

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

答案 1 :(得分:2)

正如我所知,您正在寻找编写与RDBMS无关的SQL的工具,而不是ORM。这是不同ORM供应商以不同方式解决的非常实际的问题。我只想提一下为他们的ORM开发的Xtensive SQL DOM 工具 - DataObjects.Net。它是对SQL的抽象,允许使用全功能DOM模型编写查询。此时SQL DOM不是与DataObjects.Net分开推广的,但它是一个开源产品,你肯定可以向它的作者询问它。据我所知,它已成功用于某些第三方项目。

答案 2 :(得分:1)

不是直接来自Microsoft。这些工具通常被命名为Object-Relational Mappers或简称ORM。例如,NHibernate是一种常见且广泛使用的ORM,非常适合您的需求。当然还有其他商业产品,如Telerik OpenAccess ORM,DevExpress XPO或RemObjects DataAbstract,它们将帮助您与数据库无关。