NHibernate的优点和缺点

时间:2009-08-14 14:13:31

标签: sql nhibernate orm

使用NHibernate有哪些优点/缺点? 应该使用NHibernate构建(并且不应该)构建哪种应用程序?

6 个答案:

答案 0 :(得分:12)

由于其他人已经列出了优势,我将列出缺点


缺点

  1. 由于元数据准备而增加了启动时间(不适合类似桌面的应用程序)
  2. 没有orm背景的巨大学习曲线。
  3. 比较难以微调生成的sql。
  4. 如果在非典型环境中使用(非读取非Web应用程序)
  5. ,则很难获得正确的会话管理
  6. 不适合没有干净域对象模型的应用程序(世界上没有所有应用程序都不需要干净的域对象模型)。
  7. 如果你的设计设计糟糕(遗留)数据库模式,必须跳过箍。

答案 1 :(得分:5)

优点:

  1. 灵活且功能强大的映射功能。
  2. 缓存。
  3. 非常优秀的UnitOfWork实施。
  4. 未来查询(article)。
  5. 模型类是POCO - 这实际上意味着您可以轻松实现贫血域反模式。
  6. 拦截器 - 您可以进行一种面向方面的编程...就像非常轻松地为您的域实施试听,记录,授权,验证等。
  7. Lucene.NET和NHibernate彼此很好地集成 - 为您提供非常快速有效的全文索引实现。
  8. 它在企业环境中非常成熟和流行。
  9. 大社区。

    缺点:

    1. 已经提到过学习曲线。您可以非常快速地开始使用NHibernate,但掌握它需要几个月的时间。我非常推荐阅读Manning NHibernate的书。

    2. 编写XML映射可能非常繁琐,特别是对于拥有数百个表和视图以及存储过程的大型数据库。是的,有一些工具可以帮助您生成这些映射,但是您仍然需要在那里进行大量的手工操作。 Fluent NHibernate似乎通过去除XML映射来简化这个过程,Castle ActiveRecord也是如此(虽然AR在模型类的属性中定义映射时不可能用于贫血域。)

    3. 某些风景可能性能低下。例如大型批量操作。对于那些你可能不得不使用IStatelessSession但其尴尬经验的人,最不用说......

答案 2 :(得分:3)

<强>优点

  • 开源
  • 基于广泛认可的模式
  • NH不是代码生成器:)

<强>缺点

  • 半成品LINQ支持
  • 性能低下

(参见ormbattle.net上的性能和LINQ测试)

答案 3 :(得分:1)

优点:

  1. 缓存
  2. 代码简单
  3. 电源
  4. 灵活性
  5. 多数据库支持
  6. 缺点:

    1. 停止编写自己的持久性代码
    2. 可能会减少您对SQL的了解
    3. 您应该将它用于的应用程序:

      • 任何使用数据库

      A few more specific reasons to like NHibernate

答案 4 :(得分:0)

高级答案是NHibernate本身就属于一个类,并且没有近乎竞争。

如果你需要从.NET应用程序对数据库进行CRUD,你应该使用NHibernate,至少有两个原因:

1)您获得Linq支持(需要类似ORM的东西)

2)NHibernate非常成熟

没有明显的缺点。还有其他选择,但其他选择有明显的缺点。

我刚才写了一些关于此的内容:

.NET and ORM - Decisions, decisions

答案 5 :(得分:0)

缺点:NHibernate不是微软的产品,因此会面临一些没有听说过它的同事的阻力。特别是FOSS偏执狂。配置映射文件和延迟/急切加载行为可能非常耗时。如果您的数据库具有奇怪的命名约定,非典型设计或非常严格的性能要求,则可能需要比预期更多的工作。

我说了很多,但ActiveRecord是NHibernate的一个很好的层。它使用属性将数据点映射到类本身的类成员。人们没有充分利用这件事。