当通过NHibernate更新/插入实体而不扩展具有特殊属性的域类时,如何设置一些特殊的列值?
例如,每个表都包含审计列,如CreatedBy,CreatedDate,UpdatedBy,UpdatedDate。但我不想将这些属性添加到域类中。我想保持域modedl Percistence Ignorance因子尽可能高。
发布于 2019-04-24 08:50:35
经过几个小时的黑客攻击NHibernate,我找到了如何保持域层类与基础架构层隔离的妥协解决方案。这里只有一个“受害者”是下面列表中的第1点:
1)我已经为域中的所有可持久实体引入了基类DomainObject,只有一个私有字段:
private IDictionary _infrastructureProperties = new Dictionary<object, object>();
2)在类映射中添加了以下部分:
<dynamic-component name='_infrastructureProperties' access='field'>
<property name='CreateBy' column='CreatedBy' />
<property name='CreateDate' column='CreatedDate' />
</dynamic-component>
3)实现了一个设置这些属性值的拦截器。
4)(可选)此外,我们可以实现一个类型设置,配置每个类在应用程序中播放的“角色”,然后在Interceptor中处理角色特定属性。例如,此配置可以声明Product是TenantScopeObject,并且拦截器将在系统中记录当前租户标识值中名为TenantID的属性。
发布于 2019-04-24 09:48:16
它与“不添加这些属性”不同,但是上次我看到它时,工程师通过实现具体的NHibernate类并从实现您不喜欢的属性的公共抽象基类(例如MyAuditable)派生它们来解决它。这样你只需要解决一次问题。
https://stackoverflow.com/questions/-100001132
复制相似问题