NHibernate的优点和缺点是什么?

NHibernate的优点和缺点是什么?,nhibernate,Nhibernate,对于一个新项目,我们正在考虑NHibernate。总体而言,我们非常喜欢它,但有一件事困扰着我们:它似乎非常消耗资源。显然,NHibernate将加载对象的所有属性,即使您只需要其中一个属性。此外,它还将对子对象的属性执行相同的操作 因此,我们正在权衡NHibernate的利弊。你会说它们是什么?如果正面弥补了负面?优势: 二级缓存 创建以本机方式表示数据的对象 创建SQL查询并避免SQL注入 延迟加载 遵循外键更容易 DB翻译(更改方言) 该框架得到了很好的支持,并且是开源的 有很多工具可以为

对于一个新项目,我们正在考虑NHibernate。总体而言,我们非常喜欢它,但有一件事困扰着我们:它似乎非常消耗资源。显然,NHibernate将加载对象的所有属性,即使您只需要其中一个属性。此外,它还将对子对象的属性执行相同的操作

因此,我们正在权衡NHibernate的利弊。你会说它们是什么?如果正面弥补了负面?

优势:

  • 二级缓存
  • 创建以本机方式表示数据的对象
  • 创建SQL查询并避免SQL注入
  • 延迟加载
  • 遵循外键更容易
  • DB翻译(更改方言)
  • 该框架得到了很好的支持,并且是开源的
  • 有很多工具可以为Hibernate工作并生成代码/映射文件
  • 缺点:

  • 可能比直接查询慢
  • 对象初始化比手动初始化慢
  • 初始配置是个难题
  • 映射是在运行时检查的,这对设置来说可能是一个难题

  • 这取决于你在做什么。Hibernate不是批量更新的工具。

    缺点:

  • 编辑HBM文件可能需要一段时间(尽管您可以使用Castle的ActiveRecord,它负责会话管理,让我们来声明与属性的关系,它用于生成HBM,因为NH位于AR之下。注意:您不必对Castle的AR使用AR模式)
  • 与手工编写相比,它可能会运行更多的查询来检索特定的数据图
  • 由于NH treats就像一个哑记录存储,所以利用DB引擎的能力就更难了
  • Oracle支持不如其他方言好 优势

  • 您可以使用Linq到NH,并对所有支持的方言使用Linq样式的查询
  • 您可以使用HQL而不是SQL
  • 您可以在配置文件中用几行代码切换DBs供应商
  • 有一些工具可以为您生成模式
  • 支持实例的版本控制

  • 这里有一些事情还没有提到(对不起,它不是pro/con格式)。这些适用于您将创建一个通用框架来执行基本实体操作的情况(因此您有一个可用于其他项目的可重用NHibernate库)

    • 设置它真的很痛苦。我们的现在很稳定,但我们一年前就开始开发了
    • 考虑您将要开发的应用程序类型(即web表单或WinForms),因为您在通用框架中使用的会话模型可能不同;或者,您可能希望开发一个框架,以便能够插入自己的会话管理实现。这里有很多选择
    • 如果有机会使用该框架开发一个高度并发的应用程序,那么从一开始就设计并发模型——以后很难让它正常工作
    • 如果使用
      NHibernate.Mapping.Attributes
      库,则不必处理外部XML映射文件。您所要做的就是向数据对象类添加元数据。这真的很方便,直观,易于维护

    这就是我现在所拥有的一切。如果我想到其他任何东西,我会添加到我的列表中。

    NHibernate由于延迟加载而不会加载整个对象图。话虽如此,NHibernate是发生在我身上的最好的事情之一(编码方面)。它让我不再把数据当作愚蠢的结构,而是让我开始编写“真正的”面向对象设计。谢谢你,肯尼。然而,有人告诉我,Hibernate确实支持延迟加载属性,但不支持.NET版本的NHibernate。我信任谁?:)为什么要关门???我觉得这很有建设性,答案也很好。为什么汤姆,这只被支持了4次。我看到了指向事实的要点清单。但我猜这个问题太开放了,所以哈维先生决定最好主动关闭这个线索“以防万一”