我一直在简要介绍一下NHibernate和Linq2Sql.我也打算看一下Entity Framework.
当我谈到这些ORM时,提出的问题是"它们无法扩展",它们也可以吗?从谷歌我得到的印象是他们能够很好地扩展,但最终我认为必须付出代价,是否值得为更简单的更简单的业务层付费.
这是一个很好的问题,恕我直言,他们可以扩展到任何自定义DAL.我只使用了nHibernate,所以我只关注它以及它有助于扩展系统的功能.
延迟加载 - 由于它支持延迟加载,因此您可以避免加载任何不必要的项目.当然,您需要注意Select n + 1问题,但系统中有一些事情可以防止这种情况发生.
渴望获取 - 有多种方法可以急切地获取您可能需要的对象,从而避免额外的SQL访问.
二级缓存 - nHibernate支持二级缓存,可通过减少数据库访问来提高可扩展性.有各种支持提供商可以提供一些灵活性.
编写自己的SQL - 在nHibernate中,您可以调用存储过程,或提供将返回实体的内联SQL查询.当生成的sql没有删除它时,这将允许您使用自己的SQL.例如,使用递归查询急切加载自加入树.
现在说,我认为最初调整自定义DAL层更容易,因为它与它的构造密切相关并且可以对它进行微调; 但是,一个好的ORM会提供大量的钩子,让你可以优化很多.你只需花一些时间学习它.
我还认为,如果您有一个性能关键的代码区域,并且无法让ORM在您的要求中工作,那么对于应用程序的这个小区域,您可以自定义构建自己的DAL层.如果您正在使用一个像样的设计模式,例如工厂创建的存储库,那么您需要做的就是更换存储库的实现