使用NHibernate有什么优点/缺点?应该(并且不应该)使用NHibernate构建什么样的应用程序?
由于其他人已经列出了优势,我将列出其中的缺点
缺点
由于元数据准备而增加启动时间(不适用于类似桌面的应用程序)
没有orm背景的巨大的学习曲线.
比较难以微调生成的sql.
如果在非典型环境中使用,很难获得正确的会话管理(读取非webapps)
不适用于没有干净域对象模型的应用程序(世界上没有所有应用程序都不需要干净的域对象模型).
如果您的设计(遗留)数据库架构设计糟糕,必须跳过箍.
好处:
灵活且功能强大的映射功能.
缓存.
非常精致的UnitOfWork实现.
未来的查询(文章).
模型类是POCO - 这实际上意味着您可以轻松实现贫血域反模式.
拦截器 - 您可以进行一种面向方面的编程...就像非常容易实现您的域的试听,日志记录,授权,验证等.
Lucene.NET和NHibernate相互完美集成 - 为您提供全速索引的快速有效实现.
它在企业环境中非常成熟和流行.
大社区.
缺点:
已经提到过学习曲线.您可以非常快速地开始使用NHibernate,但掌握它需要几个月的时间.我非常推荐阅读Manning NHibernate的书.
编写XML映射可能非常繁琐,特别是对于具有数百个表和视图以及存储过程的大型数据库.是的,有一些工具可以帮助您生成这些映射,但是您仍然需要在那里进行大量的手工操作.流畅的NHibernate似乎通过去除XML映射简化了这个过程,Castle ActiveRecord也是如此(当你在模型类的属性中定义映射时,AR虽然不可能用于贫血领域).
某些风景可能性能低下.例如大型批量操作.对于那些你可能不得不使用IStatelessSession但其尴尬的经历,最不用说......