加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有Nhibernate设计问题的域模型

发布时间:2020-12-15 08:30:30 所属栏目:百科 来源:网络整理
导读:我正试图开始使用“DDD with C#”世界. 我使用NHibernate作为我的ORM工具,因此尝试开发PI(Persistence Ignorance)模型. 但是,在我的一些实体(表示为POCOS)中,我在我的属性的setter中有业务规则. 例如,我有一个“用户”实体,它有一个标志,指示该用户是否被阻
我正试图开始使用“DDD with C#”世界.
我使用NHibernate作为我的ORM工具,因此尝试开发PI(Persistence Ignorance)模型.
但是,在我的一些实体(表示为POCOS)中,我在我的属性的setter中有业务规则.
例如,我有一个“用户”实体,它有一个标志,指示该用户是否被阻止,当此标志为真时,第二个字段称为“阻止日期”
必须在当前日期自动填写.
一切看起来都非常简单明了,但问题出现在我恢复已经持久存储在数据库中的用户的那一刻,即使
根据这个逻辑,被阻止的用户将其“阻止日期”更新为当前日期.
最初我想到了第二个标志“isLoaded”,表示该对象被NHibernate水合,然后这个逻辑不会启动,
然而,这似乎不像PI.有关如何改善这一点的任何建议?

解决方法

您可以在映射中为IsBlocked属性定义字段访问策略.基本上,你会说NHibernate使用底层私有字段(_isBlocked)而不是属性,因此,不会执行IsBlocked属性中的setter逻辑.

This SO question对访问策略有一个很好的答案.

官方NHibernate documentation.

如果您使用Fluent NHibernate进行映射,则可以使用以下方法进行定义:

Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读