许多产品开发人员想编写一个.NET应用程序,该应用程序将与SQL Server,Oracle,DB2,MySQL等流行的RDBM无缝配合。如果我们使用数据应用程序块,它会动态选择基于配置的数据库驱动程序(OracleCleclient,SQLCLIENT或OLEDBCLIENT)。

但是,所有数据库都有自己的SQL口味。有一些细微的差异可以阻止一个SQL代码库普遍使用 - 函数名称不同,处理日期的处理方式不同,身份列的处理方式不同,依此类推。

可以使用数据直接使用第三方产品来使用预定义的逃生序列编写DB中性代码。

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

有帮助吗?

解决方案

Microsoft Ado.net实体框架 是一个 对象相关映射 Microsoft的框架旨在让您编写(某些)DB-Agnostic的代码。所有主要DBM都对实体框架都有支持,尽管对于许多(例如MySQL,Postgres),您需要下载与.NET Framework安装分开的内容。

注意:我尚未使用O/RM工具从事一个大型项目,至少没有一种情况,我们必须出于DB特异性功能或出于性能原因(需要)以特定方式编写查询以获取良好的查询计划)。但是,良好的O/RM可以在大多数时间内都可以防止编写SQL。

也就是说,当前版本的实体框架在多个维度上非常有限 - 其他O/RM框架如 NHIBERNATE, 亚音速, 等等。要成熟得多,“成熟”是指支持更深层次的DBMS功能,而不必向本机SQL,更广泛的社区支持,更好的绩效等。

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

显然,即将到来的 .NET 4.0/VS2010 Microsoft Entity框架的版本 有很大的改进,因此以上声明可能不是明年的真实。例如,新的实体框架增加了对DDL的支持,因此您可以以独立于DBMS的方式创建表和索引。另外,.NET 4.0实体框架正在利用一个名为的酷功能 T4模板, ,这是在构建时间自动产生代码的整洁功能,这对于需要与外部DB架构同步的O/RM包装器之类的东西很重要 - 并且应该更好地产生更好的功能(又称预编译)性能要比不知道数据库列的类型的O/RM工具在运行时。

其他提示

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

不是直接来自微软。这些工具通常被命名为相关的映射器或短ORM。例如,NHIBERNATE是一种常用且广泛使用的ORM,非常适合您的需求。当然,还有其他商业产品,例如Telerik OpenAccess Orm,DeVexPress XPO或RemoBjects DataAbstracts,这将帮助您成为数据库不可思议的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top