代码之家  ›  专栏  ›  技术社区  ›  Astaar

NHibernate有哪些优点和缺点?[关闭]

  •  3
  • Astaar  · 技术社区  · 16 年前

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

    所以我们在权衡NHiberiate的利弊。你会说他们是什么?如果有利的一面弥补了不利的一面?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Josh Pearce    16 年前

    缺点:

    1. 编辑hbm文件可能需要一些时间(尽管您可以使用castle的activerecord,它负责会话管理,让我们声明与属性的关系,它用于生成hbm,因为nh位于ar之下。注意:您不必将ar模式与castle的ar一起使用)。
    2. 它可能会运行更多的查询来检索一个特定的数据图,而不是手工编写的。
    3. 更难利用数据库引擎的功率,因为nh treats就像一个愚蠢的记录存储。
    4. 甲骨文的支持不如其他方言好。

    优势

    1. 您可以使用linq to nh,并对所有支持的方言使用linq样式的查询。
    2. 可以使用hql而不是sql
    3. 您可以在配置文件中用几行切换DBS Venders
    4. 有一些工具可以为您生成模式。
    5. 支持实例版本控制
        2
  •  2
  •   monksy    16 年前

    优势:

    1. 二级缓存
    2. 创建本机表示数据的对象
    3. 创建SQL查询并避免SQL注入
    4. 延迟加载
    5. 使用外键更容易。
    6. 数据库翻译(改变方言)
    7. 该框架得到了很好的支持,并且是开源的
    8. 有许多工具可以处理和生成用于休眠的代码/映射文件

    缺点:

    1. 比直接查询慢
    2. 对象初始化速度比手动慢
    3. 初始配置是一种痛苦
    4. 在运行时检查映射,这可能会给安装带来困难。

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

        3
  •  2
  •   Jon Seigel    16 年前

    以下是一些尚未提及的内容(抱歉,它不是pro/con格式)。这些应用于您将要创建一个通用框架来执行基本实体操作的情况(因此您有一个可重用的nhibernate库,可以用于其他项目)。

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

    我现在就只有这些了。如果我还有别的想法,我会加入我的名单。