c# - 使用 CaSTLe Active Record 与 Straight NHibernate 的优缺点是什么?

标签 c# nhibernate castle-activerecord

假设编写 nhibernate 映射文件不是大问题....或者用属性污染域对象也不是大问题....

有什么优点和缺点?

是否存在任何基本技术问题?什么会影响人们的选择?

不太确定所有的权衡是什么。

最佳答案

AR 的最大优点是它为您提供现成的存储库并为您进行 session 管理。 ActiveRecordBase<T>ActiveRecordMediator<T>是您最终会在 NHibernate 下组装自己的礼物。避免 XML 映射是另一个优势。 AR 映射属性使用简单,但足够灵活,甚至可以映射相当“传统”的数据库。

AR 的最大缺点是它积极鼓励您错误地思考 NHibernate。也就是说,因为默认 session 管理是每次调用 session ,所以您习惯了持久化对象断开连接并且必须是 Save() 的想法。 d 发生变化时。这不是 NHibernate 应该如何工作的——通常你会有每工作单元或请求或线程的 session ,并且对象将在 session 的生命周期内保持连接,因此更改会自动持久化。如果你开始使用 AR,然后发现你需要切换到 session-per-request 来使延迟加载工作——这在文档中没有很好的解释——当一个你不期望的对象时,你会感到非常惊讶在 session 刷新时保存。

请记住,CaSTLe 团队将 AR 编写为 CaSTLe Monorail 的补充产品,CaSTLe Monorail 是 .NET 的类 Rails 框架。它的设计考虑到了这种用途。它不能很好地适应更多层次、解耦的设计。

按原样使用它,但不要将其视为 NHibernate 的快捷方式。如果您想使用 NH 但避免映射文件,请使用 NHibernate Attributes 或更好的 Fluent NHibernate。

关于c# - 使用 CaSTLe Active Record 与 Straight NHibernate 的优缺点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/369978/

相关文章:

sql-server-2000 - 主键数据类型无效 [int]

nhibernate - SubSonic 与 CaSTLe ActiveRecord

c# - Deepsea 混淆器忽略 Windows Phone 8 项目的设置

c# - 如何使用登录用户的 AccessToken 实例化 Microsoft GraphClient?

c# - 丢失 Oracle 数据库连接后恢复 NHibernate

c# - 为什么 NHibernate 不返回任何数据?

nhibernate - 如何使用FluentNHibernate将类映射为不可变?

c# - CaSTLe ActiveRecord - 总是更新 child ,为什么?

c# - EntityFramework 和 IoC 接口(interface)在洋葱架构中属于什么位置?

c# - 为什么在我的 ASP.Net 网站上大约每周一次出现 System.IO.FileLoadException : Could not load file or assembly,?