3

我需要开发一个基于 .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 个)。

4

6 回答 6

6

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

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

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

于 2008-11-03T18:11:49.037 回答
2

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

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

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

于 2008-11-03T18:44:28.627 回答
2

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

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

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

在 SQL Server NH 中看到“本机”生成器选项将假定它是一个标识字段(自动增量),而对于 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 模式 - 如果您遵循这条路线(从 DDD 的角度来看这是一个很好的想法),DB 层对您来说真的变得透明了。

于 2008-11-03T18:28:59.673 回答
1

Why not Firebird? Firebird has more features than the other free databases. And its supported by NHibernate and Entity Framework. And Firebird could be embedded in you application and the licensing model is less restrictive than MySQL one.

It's only my humble opinion.

于 2009-06-20T23:45:26.543 回答
0

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

于 2008-11-03T18:37:10.313 回答
0

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

于 2009-06-26T14:36:08.023 回答