具有Nhibernate设计问题的域模型

use*_*557 6 c# nhibernate domain-driven-design

我正试图开始使用"DDD with C#"世界.我使用NHibernate作为我的ORM工具,因此尝试开发PI(Persistence Ignorance)模型.但是,在我的一些实体(表示为POCOS)中,我在我的属性的setter中有业务规则.例如,我有一个"User"实体,它有一个标志,指示该用户是否被阻止,当此标志为true时,必须在当前日期自动填充第二个字段"Block Date".一切看起来都非常清晰和简单,但问题出现在我恢复已经持久存储在数据库中的用户,即使被阻止的用户将其"阻止日期"更新到当前日期,根据这个逻辑.最初我想到了第二个标志"isLoaded",它表示NHibernate正在对象进行水合,然后这个逻辑不会启动,但这看起来不像PI.有关如何改善这一点的任何建议?

Mir*_*vic 4

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

这个SO问题对访问策略有一个很好的答案。

NHibernate 官方文档

如果您使用 Fluent NHibernate 进行映射,则可以这样定义它:

Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);
Run Code Online (Sandbox Code Playgroud)