Fluent nhibernate 根据你们的经验,你们中有多少人会推荐流利的NHibernate而不是NHibernate为我的新项目做事的方式?

Fluent nhibernate 根据你们的经验,你们中有多少人会推荐流利的NHibernate而不是NHibernate为我的新项目做事的方式?,fluent-nhibernate,Fluent Nhibernate,我只是想做一个快速的民意调查,看看Fluent Nhibernate是否受到欢迎,或者它是否有很多问题。我喜欢Nhibernate,但我确实看到了xml映射的问题 因此,我期待社区成员提供一些见解,帮助我选择其中一个 目前我没有考虑linq2sql或实体框架。使用Fluent Nhibernate优于vanilla NH的一个最大优点是与PersistenceSpecification的良好集成测试: [测试] public void TestProductSave() { 新的Persis

我只是想做一个快速的民意调查,看看Fluent Nhibernate是否受到欢迎,或者它是否有很多问题。我喜欢Nhibernate,但我确实看到了xml映射的问题

因此,我期待社区成员提供一些见解,帮助我选择其中一个


目前我没有考虑linq2sql或实体框架。

使用Fluent Nhibernate优于vanilla NH的一个最大优点是与PersistenceSpecification的良好集成测试

[测试]
public void TestProductSave()
{  
新的PersistenceSpecification()
.CheckProperty(x=>x.ProductName,“Wax”)
.CheckProperty(x=>x.价格,20)
.验证应用程序();
}  

我一直在用fluent处理我的一个新项目。到目前为止,我遇到的唯一一个小问题是,温莎城堡的开箱即用不太好,但很容易扩展到温莎来完成这项工作。除此之外,我一直很喜欢它。它比XML映射简洁得多


fluent的好处在于它不是一种全有或全无的投资。你可以用fluent编写大多数映射,如果发现任何问题,你可以用标准XML映射来映射这些类,直到fluent问题得到解决。

我喜欢fluent NHibernate,如果你打算开始一个新项目,我认为它已经足够成熟了。在一个新的项目中使用它应该可以让Fluent NHibernate项目随着您的进展而继续成熟。有可能破坏更改(就像最近在约定映射中发生的那样),但您应该能够处理这些更改。我在映射方面遇到了一些问题,但该项目对bug报告的响应非常迅速,并且大部分工作都如预期的那样

映射选项包括:

  • Xml映射-NHibernate的标准。维护方面的麻烦是众所周知的,但优点是您可以访问NHibernate提供的所有配置选项。还有一些较少使用的配置选项仍在添加到Fluent中(至少上次我注意到了这一点)。所以,如果你正在期待一些疯狂的映射,你可能想考虑这个选项。

  • 标准映射-由Fluent提供。您可以通过代码创建映射,这对于重构和创作来说是更好的。根据我的经验,关于它没什么好说的,只是它工作得很好,是对xml选项的一大改进

  • 自动映射-由Fluent提供。允许您按约定映射对象属性,并尝试自动创建映射。这是个好主意,但我认为它还有一些成熟的地方要做。我目前正在使用这种映射方法,它工作得很好,但我最终编写了大量约定,并指定了对象关系,这并不像从标准映射中节省了很多精力

Fluent NHibernate还为测试映射和一些配置API提供了很好的测试帮助,这些API可以使配置NHibernate变得更容易。总的来说,这是一个很好的项目,它为NHibernate提供了一些很好的附加功能


编辑:


另外需要注意的一点是:如果您从Fluent NHibernate开始,并决定它不适用于您的场景,那么您可以轻松地迁移回xml映射。Fluent NHibernate允许您导出它创建的映射,您可以使用这些导出不会丢失您已经完成的任何映射工作。

我正在为一个新项目使用FNH。我最喜欢的是直接从实体类生成和构建数据库的能力


我不得不为属性编写一些约定,但我宁愿为每个类维护多个列表。

就像任何好的答案一样,这取决于具体情况

我并没有从自动映射功能中获得我想要的那么多里程数。我经常需要处理已有的数据库

我已经有几个项目在使用NHibernate,所以使用hbm映射并不困难。在我了解了如何将其包含在hbm模式中之后,这就容易多了

我从fluent nhibernate中获得的一个真正的优势是能够重构我的域类,并自动更改映射。我真的没有注意到在编写映射时速度提高了多少


像任何东西一样,YMMV.

+1用于重构优势,尤其是与自动映射相结合。我可以看出覆盖默认约定仍然需要一些时间,但至少我可以重构并重新生成hbm文件,从而最小化XML级别的手动调优/自定义。
[Test]  
public void TestProductSave()  
  {  
   new PersistenceSpecification<Product>()  
      .CheckProperty(x => x.ProductName, "Wax")  
      .CheckProperty(x => x.Price, 20)  
      .VerifyTheMappings();  
  }