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

标签 c# nhibernate domain-driven-design

我正在尝试进入“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/

相关文章:

c# - 如何使用结构指针导入非托管dll?

oracle - NLS_NCHAR_CHARACTERSET解释

.net - 在不加入的情况下运行 NHibernate 查询

c# - EF 代码首先是 : How to delete a row from an entity's Collection while following DDD?

architecture - 使用域事件更新读取模型不会重复业务逻辑吗?

c# - Entity Framework 播种导致插入语句与外键冲突

c# - 格式化请求 header 值

c# - 响应式扩展 .MaxBy

.net - Nhibernate查询转换为通用列表时出错

oop - 恢复域对象的最佳方式