我正在尝试进入“DDD with C#”世界。 我使用 NHibernate 作为我的 ORM 工具,因此尝试开发一个 PI(Persistence Ignorance)模型。 但是,在我的一些实体(表示为 POCOS)中,我的属性 setter 中有业务规则。 例如,我有一个“用户”实体,它有一个标志,指示该用户是否被阻止,当这个标志为真时,第二个字段称为“阻止日期” 必须自动填充当前日期。 一切看起来都非常清晰和简单,但问题出现在我恢复已经保存在数据库中的用户的那一刻,即使 根据此逻辑,被阻止的用户会将他们的“阻止日期”更新为当前日期。 最初我想在第二个标志“isLoaded”中表示对象正在被 NHibernate 水化,然后这个逻辑就不会启动, 然而,这看起来不像 PI。关于如何改进这一点有什么建议吗?
最佳答案
您可以在 IsBlocked 属性的映射中定义字段访问策略。基本上,您会告诉 NHibernate 使用底层私有(private)字段 (_isBlocked) 而不是属性,因此,您在 IsBlocked 属性中的 setter 逻辑将不会被执行。
This SO question对访问策略有很好的回答。
官方 NHibernate documentation .
如果您使用 Fluent NHibernate 进行映射,您可以这样定义它:
Map(x => x.IsBlocked).Access.CamelCaseField(Prefix.Underscore);
关于c# - 具有 Nhibernate 设计问题的领域模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821273/