大多数演示文稿推荐使用LinqToSQL,但我知道Microsoft并没有真正增强这个产品,而是更专注于Entity Framework。
我喜欢Subsonic的方法,但我认为这将在MVC 3中内置,但这个项目的开发阶段还没有任何消息,所以如果很快会有新版本发布,我有点担心使用版本2。
我听说过NHibernate和Castle Record,但完全没有使用过这些,并且对两者都听到了很多利弊。
任何帮助都将不胜感激!
nHibernate的学习曲线较陡峭,但值得一试。使用Fluent nHibernate可以稍微减轻一点压力。nHibernate不像一些ORM那样具有可视化界面,但这只是初学者面临的问题,一旦您有了经验,缺少可视化设计师实际上会成为一个优点。
对于SubSonic,Rob刚刚发布了一个新的MVC模板,您可以在启动新项目时使用它,其中包含许多有用的内容,包括SubSonic 3的预发布版本。详情请参见Rob Conery的博客。
LLBLGenPro 对我来说非常好用。它是最好的 .net ORM 工具。我建议避免使用 Linq to Sql,因为一旦项目变得庞大,你将会遇到问题,并且它在功能方面相对较弱(除了明显的缺点,比如仅支持 SQL Server 等)。
我使用linq2sql,如果你的数据库是MSSQL,那么它可以完美运行(它也可以在其他数据库上工作,但需要一些第三方工具)。是的,微软已经“停止”了它的开发,但对于普通项目来说,它已经足够成熟。我怀疑你不会遇到任何障碍。如果您要开始一个需要长期支持的大型项目,则Entity Framework可能更合适。
就我个人而言,我以前没有使用过NHibernate和Subsonic,但像Craig所说,NHibernate的学习曲线有点陡峭,尽管它应该是一个很棒的框架(从我听到或阅读的所有内容来看)。
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行为中有一些方面是你无法忽略的(比如会话范围和刷新),但是弄清楚这些方面并在ActiveRecord中使用它们,将会给你一个优势,即在需要直接使用NHibernate时能够更容易上手。
我曾在一个项目中使用过一个名为netTiers(http://www.nettiers.com/)的产品,效果非常好。它是一个CodeSmith脚本,可以从您的数据库表、视图和存储过程生成业务对象。