我应该使用哪个ORM而不是Linq到Sql?

时间:2009-11-04 21:58:26

标签: c# .net orm

我正在将CMS作为我的业余爱好项目。因为我没有得到报酬,时间不是很重要,我渴望建立一个设计良好的系统。

我有一组业务类负责主逻辑,他们通过接口从数据库获取数据,数据提供者(可以实现接口)可以从配置中设置。

目前我使用LINQ to SQL作为我的数据访问层,但是我对这个主题的阅读越多,我就越相信我应该使用更高级的ORM,因为LINQ to SQL不支持某些东西对应用程序的整体性能非常有用。例如,缓存和持久性。 (我读过NHibernate,例如,只在必要时才咨询数据库,否则它只是从缓存中获取数据。 - 这很好,因为平均而言,网站几天都没有获得新内容,所以代替通过在每个请求上从数据库中读取来浪费性能,从缓存中提供服务就好了。)

我正在考虑一些选项,并想知道我该怎么做。

  1. 为我的业务类编写自己的持久性逻辑,并继续使用LINQ to SQL。
  2. 直接使用NHibernate,或通过Castle ActiveRecord或Fluent NHibernate
  3. 使用其他一些ORM
  4. 我最喜欢的选择是第二个,因为NHibernate比我需要的更强大,而ActiveRecord似乎隐藏了大部分的复杂性。 (顺便说一句,我也打算使用Castle Windsor。)

    唯一的问题是,我找不到有关这些工具性能的任何信息。我花了几个小时用谷歌搜索(和我一起看这个网站),发现了不少文章和博客文章,但没有人对性能有任何说法。

    这会比当前的解决方案更好,还是应该使用完全不同的任务?

    提前致谢!

9 个答案:

答案 0 :(得分:7)

Linq to SQL很好(如果除了SQL Server之外你不会使用任何东西)。不要打扰Linq to Entities(EF)。在很多层面上它已经破裂(远非成熟)。

我自己会去NHibernate - 很棒的实体映射和多个数据库平台支持。还有一个经过深思熟虑的ORM。

答案 1 :(得分:4)

我会推荐Entity Framework v4.0。与尝试使用EF v1.0进行ORM的第一次尝试失败不同,使用.NET 4.0推出的版本确实令人惊叹。微软在各个层面都改进了EF,并直接回应了许多主要ORM社区支持者的意见。我通过电子邮件与Microsoft就EF的几个问题进行了直接输入,包括生成的SQL,n-Tier故事和可视化设计器的效率和有效性。

新的EF是一个可靠的ORM,可以提供完整的OOB故事,包括丰富的可视化设计器,可定制的代码生成,高效的SQL生成,多层可移植类型,POCO样式实现,代码之间非常丰富的映射,概念我曾经是nHibernate的大力支持者和EF的强大反对者,但自从我开始使用VS2010 / .NET 4.0 Beta 2后,我的观点发生了变化。我强烈建议使用EF v4.0,如果您正在使用.NET平台。

答案 2 :(得分:2)

我想说NHibernate + FluentNhibernate能让你快速上手。关于FluentNhibernate的最好的事情是你可以在几行内设置它,它会自动将你的对象映射到你的数据库。

如果您想在配置上轻松一点,可能需要查看Subsonic

答案 3 :(得分:1)

你见过S#arpArchitecture吗? 它是一个基于NHibernate和ASP.NET MVC的框架,您可以在其上构建应用程序。

好吧,如果您打算从头开始构建所有内容(也许是为了了解架构),您可以查看S#arpArchitecture的源代码以获得一些灵感。

答案 4 :(得分:1)

我的投票结果是,在进入ORM路线之前,还要检查一个完全成熟的OODBMS。

来自Versant的

db4Objects绝对值得一看,速度快,易于使用且非常成熟。

编辑:注意,db4Objects也支持Linq。

答案 5 :(得分:1)

我同意你提出第二个选择。不是因为我知道在这种情况下的表现更好,但是因为你说你想拥有一个很好的架构系统。如果您使用LINQ to SQL,您将面临的问题是您将使用LINQ拖放生成的类将强烈依赖于数据库的架构和表结构。无论何时在表结构中进行更改,都必须重新生成LINQ类。从良好的架构的角度来看,这是不可取的。您应该考虑将NHibernate与asp.net mvc一起使用。 NHibernates为您提供了通过xml文件将业务对象属性与数据库表字段映射的能力。这会在您的业务实体中添加一个额外的抽象层,而不直接依赖于您的表结构。 Codeplex上有一个使用NHibernates的好项目。以下是该项目的网址http://jscportal.codeplex.com/。这是一个使用asp.net mvc和NHibernates构建的非常干净的CMS门户。此项目还将为您提供为您的应用程序进行良好设计的想法。一切顺利!

答案 6 :(得分:1)

因为这个项目是为了学习目的而使用Nhibernate,所以值得努力学习:)

答案 7 :(得分:1)

之前已经多次询问过这个问题:

NHibernate, Entity Framework, active records or linq2sql

答案 8 :(得分:0)

LLBLGen Pro只是最好的