我应该将什么ORM用于ASP.Net MVC项目?

时间:2009-03-30 09:34:26

标签: asp.net-mvc orm

我正在开始一个新的ASP.Net MVC项目,并想知道什么是最好的模型方法。

大多数演示推荐LinqToSQL,但我知道微软并没有真正增强这个产品,而是更多地关注实体框架。

我喜欢Subsonic方法,但我认为这将与版本3的MVC一起构建,但是没有关于该项目开发阶段的消息所以我有点担心使用版本2,如果有的话很快就会成为新版本。

我听说过NHibernate和Castle Record,但对这些并没有任何经验,并且听过很多优点/缺点。

强烈建议任何帮助!

9 个答案:

答案 0 :(得分:11)

nHibernate学习曲线更高但值得。使用Fluent nHibernate来缓解疼痛。 nHibernate的视觉效果不如某些ORM,但是当你开始时它真的只是一个问题,一旦你有了它的经验,缺乏视觉设计师就是IMO的一个好处。

答案 1 :(得分:6)

对于SubSonic,Rob刚刚发布了一个新的MVC模板,您可以在启动一个新项目时使用该模板,该项目将大量优质内容融入新的MVC项目,包括SubSonic 3的预发布.Detais available on Rob Conery's blog

答案 2 :(得分:4)

LLBLGenPro对我很有用。这是最好的.net ORM。我会避免使用Linq to Sql,因为一旦项目增长你会遇到问题而且功能相当弱(除了显而易见的缺点,比如仅适用于SQL Server等)。

答案 3 :(得分:2)

我使用linq2sql并且我认为如果你使用MSSQL作为你的数据库(它也适用于其他数据库,但它需要一些第三方工具)它的工作非常好。是的,微软已“停止”其开发,但它对于普通项目已经足够成熟。我怀疑你会碰到任何一堵墙。如果您要开始一个需要在未来几年内支持的大项目,那么实体框架可能更适合。

个人以前没有使用过NHibernate和Subsonic,但就像Craig所说,NHibernate的学习曲线有点陡峭,虽然它应该是一个很棒的框架(一切都来自于什么)我听说过或读过)。

答案 4 :(得分:2)

如果你愿意花一些钱或者做一个较小的项目,我至少会尝试LightSpeed。我找到了非常有用的ORM的痛点,我现在正在使用LINQ to SQL。

LightSpeed功能非常丰富,虽然LINQ支持缺少一些无法解决的主要功能。它与LINQ to SQL和LINQ to Entities非常接近,但还有一些功能,如全文搜索。

答案 5 :(得分:1)

Castle ActiveRecord非常适用于基于MVC的中小型项目 - 我现在在几个项目中使用它并发现它非常适合ASP.NET MVC。

这是active record pattern的一个实现,它使用了NHibernate - 换句话说,只要你很高兴每个数据库表有一个类,它就会为你做大部分的NHibernate配置,让你自由编写如下代码:

Customer bob = Customer.Find(/* customer Id goes here */);
bob.FirstName = "Robert";
bob.Save();

Invoice newInvoice = new Invoice();
newInvoice.Products.Add(Product.Find(/* product ID goes here */);
bob.Invoices.Add(newInvoice);
bob.Save();

几乎没有明确的NHibernate配置(假设您的数据库中有Customer,Invoice和Product表),

因为它是NHibernate,如果你需要的话,迁移到NHibernate应该是直截了当的 - 你已经拥有了所有必要的引用和库。您无法忽略的NHibernate行为有几个方面(例如session scopes and flushing) - 但要弄清楚这些行为是什么并不太难,并且在ActiveRecord中使用它们将会很难如果/当你需要直接使用NHibernate时,请给你一个良好的开端。

答案 6 :(得分:1)

我们在这里使用Fluent + NHibernate,效果非常好。一些可以很好地融合的替代方案是SubSonic,Entity Framework和Linq to SQL。我认为直接的NHibernate比它的价值更麻烦,但它是Castle ActiveRecord以及Fluent的一个很好的底层。

答案 7 :(得分:0)

我在项目上使用了名为netTiers(http://www.nettiers.com/)的产品,效果非常好。它是一个CodeSmith脚本,可以从数据库表,视图和存储过程生成业务对象。

答案 8 :(得分:0)

如果它不是一个庞大的项目,我会使用Linq To SQL。如果你需要所有的花里胡哨,那么就可以在nHibernate上找到它并且拥有它。我认为你不会以某种方式遇到任何严重的问题。