【问题标题】:Database (and ORM) choice for an small-medium size .NET Application中小型 .NET 应用程序的数据库(和 ORM)选择
【发布时间】:2008-11-03 17:49:26
【问题描述】:

我需要开发一个基于 .NET 的应用程序,其数据要求可能会超过 SQL 2005 Express Edition 的 4 gig 限制。

由于内部 DBA 的专业知识,同一应用程序的其他客户(将来)可能需要使用特定的 DB 平台(例如 Oracle 或 SQL Server)。

问题

  1. 你们会推荐什么 RDBMS?从外观上看,主要的选择是 PostGreSQL、MySQL 或 FireBird。我只是从这些中获得了 MYSQL 的经验。

  2. 您会推荐使用哪种 ORM 工具(如果有) - 理想情况下,可以轻松地在 DB 平台之间进行交换?我喜欢实体框架的外观,但不确定支持 SQL Server 以外的平台的程度。如果有帮助,我们将使用 3.5 版本的框架。我对使用 NHibernate 之类的工具持开放态度。另一方面,如果它变得更容易,我很乐意编写自己的存储过程/DAL 代码 - 不会有那么多表(可能是 30-35 个)。

【问题讨论】:

    标签: .net orm


    【解决方案1】:

    我建议将 NHibernate 与 postgres 一起使用。

    您可以在 sqlite 上进行所有测试和开发,因此您无需在开发机器上运行 postgres 实例。

    如果您不确定要使用 mysql 还是 postgres,我建议您都尝试一下。 Postgres 更合规,但如果您对 mysql 感到满意(并且您使用的是 ORM),您可能应该使用它。

    【讨论】:

      【解决方案2】:

      我最近评估了很多可能的 .NET 的 ORM 解决方案。如果我是你,我不会在使用 MS SQL 以外的任何东西时使用实体框架路线——除了概念实体模型问题(它是通用的,但没有办法用这个模型捕捉类似序列的东西)您强烈依赖第三方数据库驱动程序提供商开发人员 - 对我来说,这个等式中肯定有很多变量。

      另一方面,NHibernate 允许在代码中既通用又特定于所选的 DB 方言。例如。您可以将此类属性用于 Id 属性:

      [Generator( Class = "native")]
      //...
      public virtual int CustomerId {get; set; }
      

      使用 SQL Server NH 看到“Native”生成器选项将假定它是一个标识字段(自动增量),而对于 Oracle,它将假定此属性使用具有相同名称的序列(您可以根据需要更改序列名称)。

      另外,就在几天前,MS 完全放弃了 LINQ 到 SQL 入门级 ORM。您永远无法确定他们是否不会对 Entity Framework 做同样的事情。使用开源 NHibernate 就没有这样的问题。

      我无法在不了解您的具体需求的情况下提出任何数据库,但是如果您想使用免费软件(不包括 Oracle)并且您还没有使用 MySql 的经验,您应该尝试使用 Postgres,它比 MySql 更强大。

      无论如何,使用 NHibernate,您可以在以后轻松切换数据库。

      以下是 NHibernate 支持的数据库方言列表: http://www.hibernate.org/361.html

      编辑:注意到您已经了解 MySQL - 因为您不会在 NHibernate 中直接使用 DB NHibernate 究竟对 DB 做了什么。

      但是您应该知道,NHibernate 让您首先编写数据类并自动生成您的 DB 架构 - 如果您遵循这条路线(从 DDD 的角度来看这是一个很好的想法),DB 层对您来说真的会变得透明。

      【讨论】:

        【解决方案3】:

        我使用MyGenerationSoftwareNHibernate 为mySQL 数据库自动生成类/ OR 细节。 MyGenerationSoftware 的好处是它可以查看您的数据库并从中构建您的类。

        MySQL(在我看来)是一个生产质量数据库,许多商业网站都使用 mySQL,包括 Slashdot

        对于 NHibernate,一旦设置好,就可以轻松编辑 XML 以指向不同的数据库,这就是切换数据库所需的全部内容。

        【讨论】:

          【解决方案4】:

          为什么不火鸟? Firebird 具有比其他免费数据库更多的功能。它由 NHibernate 和实体框架支持。 Firebird 可以嵌入到您的应用程序中,并且许可模型比 MySQL 的限制更少。

          这只是我的拙见。

          【讨论】:

          • 我第二个你。 firebird 非常适合那个空间。
          【解决方案5】:

          Llbgen 非常适合您的 ORM 映射器。起初有相当多的学习曲线,但是一旦你掌握了它的窍门,它就非常好。它支持您在此处提到的数据库以及更多数据库。

          【讨论】:

          • Lblgen 的问题是我必须为此付费。列出的其他工具是“免费的”(包括啤酒和演讲)。
          【解决方案6】:

          EntityORM - http://entityorm.uuuq.com 满足您的需求,而不仅仅是。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-19
            • 1970-01-01
            • 2010-12-14
            • 1970-01-01
            • 1970-01-01
            • 2012-05-27
            • 1970-01-01
            • 2016-06-25
            相关资源
            最近更新 更多