我正在尝试进入“DDD with C#”世界。
我使用NHibernate作为我的ORM工具,因此尝试开发一个PI(Persistence Ignorance)模型。
但是,在我的一些实体(表示为 POCOS)中,我的属性设置器中有业务规则。
例如,我有一个“用户”实体,它有一个标志指示该用户是否被阻止,当该标志为真时,第二个字段称为“阻止日期”
必须自动填充当前日期。
一切看起来都非常清晰和简单,但是当我恢复已经保存在数据库中的用户时,问题就出现了,即使
根据此逻辑,被阻止的用户的“阻止日期”将更新为当前日期。
最初我认为第二个标志“isLoaded”表明该对象正在被 NHibernate 水合,然后这个逻辑不会被启动,
然而这看起来并不像 PI。关于如何改进这一点有什么建议吗?
您可以在 IsBlocked 属性的映射中定义字段访问策略。基本上,您会告诉 NHibernate 使用底层私有字段 (_isBlocked) 而不是属性,因此,IsBlocked 属性中的 setter 逻辑将不会被执行。
这个问题 https://stackoverflow.com/questions/2339264/property-access-strategies-in-nhibernate关于访问策略有一个很好的答案。
官方NHibernate文档 http://nhforge.org/doc/nh/en/index.html#mapping-declaration-property.
如果您使用 Fluent NHibernate 进行映射,则可以这样定义它:
Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)