使用哪种ORM?

时间:2010-04-25 18:24:46

标签: c# nhibernate entity-framework orm subsonic

我正在开发一个具有这些类的应用程序:

class Shortcut
{
    public string Name { get; }
    public IList<Trigger> Triggers { get; }
    public IList<Action> Actions { get; }
}

class Trigger
{
    public string Name { get; }
}

class Action
{
    public string Name { get; }
}

我还会有20多个课程,这些课程将来自TriggerAction,所以最后我会有一个Shortcut课程,15 Action - 派生类和5 Trigger - 派生类。

我的问题是,哪个ORM最适合此应用程序? EFNHSubSonic或其他可能的内容(Linq2SQL )?

我将定期发布新的应用程序版本,添加更多触发器和操作(或更改当前触发器/操作),因此我还必须更新数据库模式。我不知道EFNH是否提供了轻松更新架构的好方法。或者,如果他们这样做,是否有任何教程如何做到这一点?

我已经找到this有关NH架构更新的文章,引用:

  

幸运的是,NHibernate为我们提供了更新现有模式的可能性,即NHibernate创建了一个可以应用于数据库的更新脚本。

我从未发现如何实际生成更新脚本,因此我无法告诉NH更新架构。也许我误读了一些东西,我只是没找到它。

注意:如果您建议EFEF 1.0也适合吗?我宁愿使用比4.0更旧的.NET 注2: ORM框架应免费用于商业用途 注3:我还会使用代码混淆,随机重命名所有符号等......所以ORM应该支持这个。

3 个答案:

答案 0 :(得分:7)

在.NET 4之前,实体框架还不够成熟,不符合我的口味。此外,它不支持POCO。

使用EF输出,我会选择NHibernate。为了使配置基于代码更容易,我还会使用Fluent NHibernate。 NHibernate非常成熟,并且有很多社区支持。它具有从最新代码更新数据库模式的出色工具。强烈推荐。

我不认为其他任何一个都是严肃的选择。实体框架将迅速获得思想共享,因为它内置并由MS严格营销。 NHibernate将继续成为可行的竞争对手,因为它具有广泛的普及性和成熟度。其余的将慢慢落在路边,直到它们只被少数热心的支持者使用。

答案 1 :(得分:6)

我认为你在这里比较两个不同类别的系统:

  • SubSonic和Linq-to-SQL在数据库之上是相当简单的薄层。它们基本上只提供数据库表和域对象之间的1:1映射。如果这对你的情况来说足够好,那么这些工具是最简单,最容易使用的,也是性能最好的ORM,

  • .NET 4和NHibernate中的EF是完全不同的类 - 它们提供企业级功能,它们支持多个数据库,它们支持映射和将数据库结构变形为不同的域结构,并且它们'擅长那个。 EF4也支持POCO,以前针对EF使用的所有问题与.NET 4版本的Entity Framework几乎没有关系。

    但是NHibernate和EF4都比较复杂,它们需要更多的设置,更多的学习曲线,直到你“得到它”,它们有点重,它们有额外的映射层,可以实现这些高级功能,但它们也是性价比,它们使事情变得更加复杂。

所以我想这真的可归结为您的要求:如果您需要一个相当简单易用的系统,请使用Linq-to-SQL或Subsonic。如果您需要更多企业级功能,并且不介意设置这些ORM所需的额外工作,请选择EF4或NHibernate。

答案 2 :(得分:0)

请参阅DataObjects.Net:虽然它是商业广告,但您需要一些功能(例如架构升级)。

相关问题