NHibernate 还是 FluentNHibernate 还是 ActiveRecord?

标签 nhibernate orm activerecord fluent-nhibernate

我正处于将 CSharp 类映射到数据库表的阶段。在与其他工具进行比较后,我决定使用 NHibernate 作为我的 ORM 工具。我以前从未使用 NHibernate 做过真正的项目,现在正在考虑映射的替代方案,

ActiveRecord:根据该项目的网站,使用 ActiveRecord 可以显着提高工作效率。但是,我不喜欢向我的 CSharp 类添加属性的想法。毕竟,我的类(class)不应该有任何数据库关系的知识。通过使用 ActiveRecord 会将我很好分离的类绑定(bind)到 ActiveRecord,如果我将来想切换下划线 DAO 层实现,这会给我带来困难。

FluentNHibernate:FluentNhibernate 是我开始映射时的第一次尝试。但我对这种方法也有一些问题。 1)我不喜欢我的映射策略编译为二进制文件。我希望能够通过修改 xml 文件来更改映射。 2)FluentNHibernate的成熟度。 NHibernate 已经存在很长时间了,并且拥有很多用户,所以我对它的成熟度感到非常满意。相比之下,FluentNhibernate 相对年轻,没有经过那么多用户的测试。尽管我可以深入研究源代码来解决出现的任何问题,但我对自己接触低级实现的技能感到不满意。 3) FluentNHibernate 的文档可用性比 NHibernate 多。当我碰壁时,我希望有一个地方可以去。

NHibernate:目前,我使用裸 Nhibernate xml 来进行映射。老实说,使用 XML 让我非常头疼。从字面上看,我必须克制住自己扔掉 .hbm.xml 文件并每天多次获取 ActiveRecord 或 FluentNHibernate 的冲动。

所以,这是我的困境:我应该随心所欲地“把这该死的事情完成吧!”;或者,我应该遵循“良好实践指南”来承受现在的痛苦并在以后获得相对轻松的时间吗?

有什么意见吗?

最佳答案

请注意,与 ORM 相关的任何类都不必被视为“业务对象”类或暴露给您的 UI。它们应该被视为数据层的一部分。这种模式并不是 ActiveRecord 所独有的。一般来说,您希望业务层尽可能少地了解其下面存在 ORM 的事实,并且不希望 UI 知道数据层。您还想考虑DTOs .

Fluent NHibernate 解决了弱类型 XML 重构时容易出错的问题。

虽然采用 ActiveRecord 之类的东西可能有缺点,但它似乎是适合您的情况的合适解决方案。

使用 .hbm.xml 文件的最佳原因是您要从数据库中编码生成它们(使用类似 CodeSmith 的东西)。手动编码 .hbm.xml 文件很少是最佳选择。

关于NHibernate 还是 FluentNHibernate 还是 ActiveRecord?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1469703/

相关文章:

c# - 带有 IUserType 的 NHibernate linq 查询

C# - NHibernate带来多对多关系的多条记录

java - 使可嵌入类的字段从 JPA 中的嵌入类 transient 化

mysql - 在 Rails 中的多个数据库之间切换而不中断事务

ruby-on-rails - postgresql中的数据库连接超时错误

nhibernate - 在Fluent NHibernate中检查是否存在延迟加载的 child 而不获取/加载

c# - 如何在 Linq to NHibernate 中使用按位运算符查询枚举标志

javascript - 是否有基于 REST 的 ORM?

java - 如何使用 hibernate 映射插入当前时间戳?

ruby-on-rails - 按 JSON 数组中的匹配数查询和排序