2009-08-29 148 views
35

我希望听到别人对他们是否会选择的意见(请不要'不要'过虑'),以及为什么。NHibernate或流利的NHibernate?

使用流利的缺点是什么? (版本依赖可能?) 优点,缺点,经验等

+1

hbm.xml文件在NHibernate中用于映射,但流利的NHibernate用C#代码替换它。很容易发现问题和维护。 – 2012-11-29 13:40:20

+3

3年前我问过这个问题,这个月它会关闭吗?呵呵。 – UpTheCreek 2012-11-29 14:19:25

回答

52

流利NHIbernate坐在NHibernate的顶部,所以它不是真正的两个选择之间。如果你打算使用NHibernate,CHOOSE在它上面使用Fluent NH来节省你大量的工作量。

功能NHibernate是真棒,没有它,我不会使用NHibernate的。您可以流利地映射所有实体(为您提供编译时间检查和自动化测试支持),而不必维护繁琐的xml文件并记住它们的语法/ DTD。

它还可以自动在您的实体基于默认和/或自己的自定义映射约定。

只要使用它!

+0

是的,抱歉,我应该稍微区别一下我的问题;)谢谢你的回答。 – UpTheCreek 2009-08-29 09:50:40

+0

是的,我不能同意更多。我们使用了Fluent和Rhino以及Geo库。我们偶尔遇到版本差异! – Perhentian 2009-10-20 10:43:30

+0

我第二。我刚开始使用流利NHibernate,我不(不会)回头。映射你的课程是多么容易,真是太神奇了。 – Siewers 2010-04-28 06:44:58

9

使用功能NHibernate与NHibernate一起的好处是,你得到编译时错误,如果你已经搞砸了你的映射,而不是运行时错误。在重构代码时,您还可以获得更好的体验,因为在重命名属性或其他内容时,映射会保持最新状态,而不必记住手动修改XML映射文件。

功能NHibernate的最大缺点是,它仍处于发展的相当早阶段,有相当重大更改为框架的发展进步的一大隐患。

+1

根据我的经验,由于我遇到的使用FluentNHibernate的映射错误导致的大部分错误都是在运行时发生的,因为NHibernate首次在应用程序中使用。只有简单的重构/类型不匹配/ mispellings /等。会导致编译时错误。 – 2010-02-25 21:44:28

4

个人而言,我还没有真正得到多少进入功能NHibernate,因为我舒服的映射文件。使用visual studio创建映射文件是一件轻而易举的事情,您可以为xml文件设置架构,从而为映射文件提供智能感知。我同意编译时语法检查对于使用fluent-nhibernate是一个优势,但是当我已经熟悉XML映射时,我很努力学习流利的API。也许我应该只得到了我的lethergy并且已经学习它... :-)

12

我肯定会说去用流利的-NHibernate的。请注意,它可能不一定像您希望的那样顺利。

  1. 关于版本依赖

    1. 升级到FNH的新版本时,我有一个“反向”的依赖问题,要求我升级到NH的新版本(2.0到2.1,我认为) 。这对我来说不是一个主要问题。
    2. 我刚刚(今天早上)将NH 2.1.1放入FNH 1.0 RTM(这是2.1.0发行版),没有任何戏剧(还)。
  2. 编辑:既然写这篇文章,我不认为这是一个真正的问题了 映射支持FNH大幅成熟到 - 些映射是没有可能的功能NHibernate。然而,这并不是避免FNH的原因,因为混合的fluent-xml映射允许您在流畅无法映射的情况下对传统xml进行回退(尽管这只针对每个类的粒度)。映射的例子:

    1. 仍然不能映射领域 - http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/a7787927dafd23a/84ce2616946a18d7
    2. 不能字典http://groups.google.com/group/fluent-nhibernate/browse_thread/thread/d38b6c72250cd2fb的一些次地图 - 其实从我收集这个功能存在,但不是主线呢。
  3. 复合复杂因子。从它的声音,你将同时学习FNH和NH。对于大多数相当简单的应用程序来说,这很好 - 事实上FNH通常非常好,所以您需要对hbm.xml映射知之甚少。但是如果你想要去做一些相当复杂的事情,那么它第一次很少会工作,而且你还想知道它是PEBKAC,流利还是NH问题。比我希望的更多的是,我最终编写了传统的xml映射(当然,无论如何你都这样做了,但最好不要花费比先行流利的更多的努力)。

+0

感谢你的想法 - 我在第3点听到你的意见。最后我和FNH一起去了,但我也在做一个小项目,非常流利 - 这真是个好主意,因为我觉得我学到了很多东西关于NH,并且实际上知道发生了什么感觉更舒服。 (顺便说一句,我必须查看PEBKAC,但是 - 这是我的大部分问题源于其中) – UpTheCreek 2009-11-13 11:28:41

+3

只是FYI,现在支持最新版本的字段。 – 2010-05-17 14:51:17

+0

您可以始终从流畅的映射中生成hbm.xml并手动编辑它们。不需要手写全部 – Firo 2012-11-08 06:40:29

2

功能NHibernate是真的结束了NHibernate的一个很好的包装。管理Fluent中的映射比xml映射更好。随着您对Fluent的发展变得越来越快...

如果您使用Entity Developer创建实体和数据库模式,那么最好。