适用于中小型.NET应用程序的数据库(和ORM)选择

时间:2008-11-03 17:49:27

标签: .net orm

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

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

问题

  1. 你们推荐哪种RDBMS?从它的外观来看,主要的选择是PostGreSQL,MySQL或FireBird。我只从这些中获得了MYSQL的经验。

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

6 个答案:

答案 0 :(得分:5)

我建议使用NHibernate和postgres。

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

如果您不确定是否要使用mysql或postgres,我建议您尝试使用它们。 Postgres更符合要求,但是如果你对mysql感到满意(并且你正在使用ORM),你应该使用它。

答案 1 :(得分:2)

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

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

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

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

此外,就在几天前,MS完全抛弃了LINQ to SQL入门级ORM。您永远无法确定他们是否会对Entity Framework执行相同操作。开源NHibernate没有这样的问题。

我不能建议任何数据库不知道您的具体需求,但如果您想使用免费软件(不包括Oracle)并且您还没有使用过MySql,那么您应该尝试Postgres,它比MySql更强大。

无论如何,使用NHibernate,您可以稍后切换数据库而不会有太多痛苦。

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

编辑:注意到你已经知道了MySQL - 因为你不打算直接使用数据库,无论如何使用NHibernate我认为你应该先从MySql开始并专注于ORM部分 - 它将更容易控制NHibernate究竟对DB做了什么。

但是您应该知道NHibernate允许您首先编写数据类并自动生成数据库模式 - 如果您遵循此路由(从DDD角度来看这是一个很好的想法),DB层将真正变得透明。< / p>

答案 2 :(得分:2)

我使用MyGenerationSoftwareNHibernate自动生成mySQL数据库的类/ OR细节。 MyGenerationSoftware的优点在于它可以在您的数据库中进行对等并从中构建您的类。

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

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

答案 3 :(得分:1)

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

这只是我的拙见。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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