为什么是Fluent NHibernate与hbm XML文件?

为什么是Fluent NHibernate与hbm XML文件?,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,虽然这是一个主观问题,但作为一个新的NHibernate用户,我很好奇为什么会选择Fluent而不是传统的XML映射 从我的角度来看,当我第一次与NHibernate合作时,我使用了Fluent接口,但遇到了一些障碍,很难为Fluent接口找到足够的文档,用于“玩具应用程序”之外的任何东西,因此我学会了通过XML处理这些问题 随着时间的推移,我意识到我的大部分工作都是在XML方面进行的,并意识到这并不像我想象的那么可怕。所以对我个人来说,这是一个糟糕的文档,没有看到在编码时间上的显著节省 话虽如

虽然这是一个主观问题,但作为一个新的NHibernate用户,我很好奇为什么会选择Fluent而不是传统的XML映射

从我的角度来看,当我第一次与NHibernate合作时,我使用了Fluent接口,但遇到了一些障碍,很难为Fluent接口找到足够的文档,用于“玩具应用程序”之外的任何东西,因此我学会了通过XML处理这些问题

随着时间的推移,我意识到我的大部分工作都是在XML方面进行的,并意识到这并不像我想象的那么可怕。所以对我个人来说,这是一个糟糕的文档,没有看到在编码时间上的显著节省


话虽如此,我可能遗漏了一些巨大的优点/缺点,我真的很想听听在使用这些工具方面有更多经验的人的意见。

编译时安全和重构(重命名类、属性)是流畅映射的好处之一。使用一种语言(C#或VB.NET)编写映射、程序代码和数据访问是另一个好处。

  • 编译时名称和类型安全
  • IntelliSense向您展示在任何时候都可以使用哪些fluent方法
  • 可自定义默认值
  • 汽车制造商

与许多开源软件一样,该库在许多功能投入生产之前就已向公众开放。根据您使用的FluentNhib的版本,有些功能可能根本没有实现。例如,当我第一次开始使用它时,复合键还没有实现,我发现了一个又一个绊脚石


但是这个产品已经发展成为一个非常好的工具。与xml相比,它的功能非常完整,并且提供了其他人已经概述的所有好处。

对我来说,Fluent的最大功能是Automapper

我可以使用POCO类来定义我的域模型,而不用担心如何将它们映射到关系数据库中的表

作为一名长期的OO开发人员,以及偶尔的DB开发人员,我更愿意以OO的方式进行设计。我还相信,这使我能够在更高、更强大的抽象层次上工作

自动映射还使对域模型的持续更改不那么令人生畏

您的客户在最后一刻告诉您,他们想向数据库中添加四个新列

没问题-向关联的POCO添加四个新属性(4行代码),然后重新映射


在许多项目中,不断变化的需求是生活中的一个事实,这给我们带来了很多痛苦。

我将添加一个原因,这对于基于公共代码库创建自定义功能非常重要:


使用fluent,您可以覆盖映射以添加新字段。对现有(超类)映射的更改将自动合并到自定义/分支中。我被迫使用Fluent来避免为每个客户维护单独的.hbm/xml文件。很高兴我这么做了:)

实际上我有一个问题。我记得如果我的映射文件关闭了,Fluent会抛出一个很好的编译错误——但是如果我输入了一个表列,这会有帮助吗?或者我会像现在hbm XML崩溃时那样调试异常吗?谢谢你的回答!如果您键入了错误的表名或列,那么就没有什么可以为您节省的。您可以通过NHibernate XSD模式获得XML形式的IntelliSense。IntelliSense基于hibernate模式,但不基于您的对象模型。自动映射+1,IMO是唯一真正的“灌篮”。其他好处很好,但并不令人兴奋。对不起,您能澄清一下这比更新xml有什么好处吗?