为.NET项目选择数据库和ORM

为.NET项目选择数据库和ORM,.net,database,linq,nhibernate,orm,.net,Database,Linq,Nhibernate,Orm,我正在客户端使用Silverlight开发一个.NET应用程序。现在我要在服务器端抛出静态虚拟数据,并添加一个数据库 对于数据库,我想使用其中一个ORM,在那里我可以简单地标记我的模型类,并且数据库表是为我构建的。我之前用Groovy和Grails做了一些测试,认为GORM做得很顺利。在.Net中建立数据库的最佳方法是什么 我首先想到的是使用nHibernate。我对nHibernate一无所知,但我听到很多人热情地提到它。但是后来我发现ADO.Net也是一种ORM,它内置在框架中。。nHibe

我正在客户端使用Silverlight开发一个.NET应用程序。现在我要在服务器端抛出静态虚拟数据,并添加一个数据库

对于数据库,我想使用其中一个ORM,在那里我可以简单地标记我的模型类,并且数据库表是为我构建的。我之前用Groovy和Grails做了一些测试,认为GORM做得很顺利。在.Net中建立数据库的最佳方法是什么

我首先想到的是使用nHibernate。我对nHibernate一无所知,但我听到很多人热情地提到它。但是后来我发现ADO.Net也是一种ORM,它内置在框架中。。nHibernate比ADO强吗?林克怎么了?我看到它也被列为ORM,但我认为LINQ更适合查询部分?我可以通过LINQ“定义”数据库吗

欢迎提出任何意见和建议。我也想听听你们对使用什么样的数据库有什么看法。我想MS SQL Server是最简单的选择

你看过吗


对于一个没有现有数据库的系统,我认为NHibernate+FluentNHibernate自动映射值得一试:

我以前没有使用过自动映射(我得到了一个要使用的模式),它们将是我要研究的第一个想法

第二个选择是ActiveRecord,它可能更可靠/更可靠:

同样,我也没有使用它,但我相信您可以使用属性标记实体以指定映射

两者的关键在于NHibernate可以将映射导出到数据库,并自动创建表

我也不知道这对Silverlight有何影响


在回复注释时(此处输入比注释更容易):

NHibernate支持的是获取项目中定义的映射文件并将其导出到数据库的能力。这意味着您只需定义一次模式(应用程序)

现在,这些映射文件通常是xml。这没什么大不了的,但显然还有改进的余地

FluentNHibernate允许您(a)在代码中定义映射文件,或(b)通过约定从实体自动创建映射文件。我使用方法(a),因为我的数据库很糟糕,在这个世界上没有关于它的约定,但对于您的使用,我建议(b)使用自动映射。上面的wiki链接提供了一个快速示例,说明如何映射产品和货架

Active Record的工作原理是让您不使用XML定义模式,而是将其定义为实体上的属性。它远不止这些,因为它还实现了RoR使用的ActiveRecord模式(Entity.Save等)。我从未使用过这个,但它被广泛使用

NHibernate模式生成的一个优点是单元测试。我可以用几行代码在SQLLite中创建一个测试数据库,导出模式,填充测试数据,运行测试,然后将其拆下。它使集成测试变得容易,并有助于测试查询是否正常工作


我不知道这些是否是最好的解决方案,因为我实际上只使用NHibernate,所以不能对Linq2SQL或EF或其他ORM发表评论。

NHibernate和Silverlight:

NHibernate的贡献者之一Ayende Rahien最近发布了关于NHibernate和Silverlight的文章:

我有几个关于NHibernate和Silverlight的问题。这其实是一个很容易回答的问题

不要尝试。他们相处不好。事实上,他们甚至无法相处

Silverlight没有System.Data.IDbConnection,您可以放心地假设它对NHibernate有些重要

因此,在Silverlight应用程序中运行NHibernate(大概是为了访问本地数据库)是不可能的。但我不认为这是大多数人在询问NHibernate和Silverlight时真正想到的。他们想知道服务器上的NHibernate和客户端上的Silverlight

这也很容易回答,它将像任何客户机/服务器系统一样工作。所有这些规则都适用

因此,只要您不打算直接从Silverlight客户端使用NHibernate,它就应该可以工作

NHibernate:

NHibernate是一个很好的ORM,但是它有一个非常陡峭的学习曲线,所以如果您选择NHibernate,您应该准备投入一些时间来学习这个框架。如果您进行了投资,您将获得NHibernate提供的灵活性和力量的回报

城堡活动记录:

CastleActiveRecord是一个构建在NHibernate之上的框架,因此与NHibernate非常相似。它稍微缩短了学习曲线,因为它添加了一些额外的抽象。顾名思义,它是为与ActiveRecord模式一起使用而构建的,并且包含一个基类,如果您不介意使用它们的ActiveRecord基类,它将为您提供很多功能

LINQ到SQL:

LINQ to SQL和ADO.NET实体框架是.NET框架中包含的两个ORM:s。LINQtoSQL是一个比实体框架更小、更简单的框架,但它有一些很好的特性,并且非常容易入门

实体框架:

实体框架也很容易开始使用,但是在当前版本中它有一些相当大的问题,因为它仍然在版本1中。然而,实体框架的下一个版本将改进并修复当前的许多缺陷

框架的LINQ和模式生成:

所有这些框架都支持使用LINQ作为查询语言。LINQtoSQL和NHibernate可以根据域类和映射为您生成模式。实体框架无法在v1中生成架构,但v2将添加该func
Person.allinstances.address->select(hasGeoPoint).streetname