代码之家  ›  专栏  ›  技术社区  ›  Chakra

与数据库无关的.NET应用程序

  •  5
  • Chakra  · 技术社区  · 15 年前

    许多产品开发人员希望编写一个.NET应用程序,它将与任何流行的RDBM(如SQL Server、Oracle、DB2、MySQL)无缝工作。如果我们使用数据应用程序块,它会根据配置动态地选择数据库驱动程序(OracleClient、SQLClient或OlebClient)。

    但是,所有数据库都有自己的SQL风格。存在一些细微的差异,这些差异阻碍了一个SQL代码库被普遍使用——函数名不同,处理日期的方式不同,处理标识列的方式不同等等。

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

    有没有微软的工具或产品可以解决这个问题?

    3 回复  |  直到 15 年前
        1
  •  12
  •   Justin Grant    15 年前

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

    注意:我还没有使用O/RM工具来处理一个大型项目,在这个项目中,至少有一种情况下我们必须使用本机SQL——要么是针对特定于数据库的功能,要么是出于性能原因(需要以特定的方式编写一个查询来获得一个好的查询计划)。但是一个好的O/RM在大多数时候都可以工作,以防止不得不编写SQL。

    这就是说,实体框架的当前版本在许多维度上相当有限——其他O/RM框架如 NHibernate , SubSonic 等更为成熟,其中“成熟”意味着支持更广泛的DBMS功能,而不必使用本机SQL、更广泛的社区支持、更好的性能等。

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

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

        2
  •  2
  •   Alex Kofman    15 年前

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

        3
  •  1
  •   Sebastian P.R. Gingter    15 年前

    不是直接来自微软。这些工具通常被命名为对象关系映射器或简称ORM。例如,NHibernate是一种常见且广泛使用的ORM,非常适合您的需求。当然,还有其他商业产品,如telerik openaccess orm、devexpress xpo或remobjects dataabstract,它们将帮助您成为数据库不可知者。