我只是想做一个快速调查,看看Fluent Nhibernate是否受到好评或是否有很多问题。我喜欢Nhibernate,但我确实看到xml的问题要做映射。
所以,我期待社区成员获得一些见解并帮助我挑选一个。
我目前不考虑linq2sql或实体框架。
答案 0 :(得分:11)
我喜欢Fluent NHibernate,我认为如果你要开始一个新项目,它已经足够成熟了。在新项目中使用它应该允许Fluent NHibernate项目随着您的进展而继续成熟。有可能破坏更改(最近发生在约定映射中),但您应该能够处理这些更改。我在映射方面遇到了一些问题,但该项目对错误报告非常敏感,并且大部分都按预期工作。
映射选项包括:
Xml映射 - NHibernate的标准。维护难题众所周知,但优点是您可以访问NHibernate提供的所有配置选项。还有一些较少使用的配置选项仍在添加到Fluent(至少上次我注意了)。因此,如果您预计会有一些疯狂的映射,您可能需要考虑这个选项。
标准制图 - 由Fluent提供。您可以通过代码创建映射,并且更好地进行重构和创作。根据我的经验,没什么可说的,除此之外它运作良好并且是对xml选项的重大改进。
自动映射 - 由Fluent提供。允许您按约定映射对象属性,它会尝试自动创建映射。这是一个好主意,但我认为它还有一些成熟的事情要做。我目前正在使用这种映射方法并且它工作正常,但我最终编写了大量约定并指定了对象关系,它不会感觉它从标准映射中节省了很多精力。
Fluent NHibernate还提供了很好的测试帮助程序来测试映射和一些配置API,可以更容易地配置NHibernate。总的来说,这是一个很好的项目,它为NHibernate提供了一些不错的附加功能。
编辑:
还有一点需要注意:如果您从Fluent NHibernate开始并确定它不适合您的场景,您可以轻松地迁移回xml映射。流畅的NHibernate允许您导出它创建的映射,并且您可以使用这些导出来不丢失您已经完成的任何映射工作。
答案 1 :(得分:5)
使用Fluent Nhibernate优于vanilla NH的最佳优势之一是使用PersistenceSpecification <T
&gt;进行良好的集成测试:
[Test]
public void TestProductSave()
{
new PersistenceSpecification<Product>()
.CheckProperty(x => x.ProductName, "Wax")
.CheckProperty(x => x.Price, 20)
.VerifyTheMappings();
}
答案 2 :(得分:1)
我一直在流利地使用我的新项目。到目前为止,我唯一遇到的轻微撞击是它与Castle Windsor开箱即用并不是很好,但是很容易让Windsor完成这项任务。除此之外,我一直很喜欢它。它比XML映射更简洁。
流利的好处是它不是一项全有或全无的投资。您可以用流利的方式编写大部分映射,如果发现任何问题,可以在标准XML映射中映射这些类,直到解决了流畅的问题。
答案 3 :(得分:1)
就像任何好的答案一样,这取决于。
我没有像我想要的那样从自动化功能中获得尽可能多的里程数。我经常需要使用预先存在的数据库。
我已经有几个使用NHibernate的项目了,所以使用hbm映射并不困难。在我弄清楚如何包含在hbm架构中之后,它变得更加容易。
我从流畅的nhibernate中获得的一个真正优势是能够重构我的域类并使我的映射自动更改。我没有注意到写入映射的速度增加了很多。
像任何东西一样,YMMV。
答案 4 :(得分:0)
我正在使用FNH进行新项目。我最喜欢的是能够直接从实体类生成和构建数据库。
我必须为属性编写一些约定,但我宁愿为每个类维护多个列表。