关于c#:NHibernate,审核和计算列值

关于c#:NHibernate,审核和计算列值

NHibernate, auditing and computed column values

通过NHibernate更新/插入实体时,如何在不扩展具有特殊属性的域类的情况下设置一些特殊的列值?

例如。 每个表都包含审核列,例如CreatedBy,CreatedDate,UpdatedBy,UpdatedDate。 但是我不想将这些属性添加到域类中。 我想保持域modedl的Percistence无知因子尽可能高。


对于搜索引擎旅人,请注意,对于NH v2.0及更高版本,现在可以很方便地使用事件侦听器执行此操作:

例:

http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

手册:

http://knol.google.com/k/fabio-maulo/nhibernate-chapter-11-interceptors-and/1nr4enxv3dpeq/14


经过几个小时的NHibernate攻击后,我发现了一种折衷的解决方案,该解决方案是如何将域层类与基础结构层隔离。这里只有一个"受害者"是下面列表中的第一点:

1)我为只有一个私有字段的域中的所有可持久实体引入了基类DomainObject:

1
private IDictionary _infrastructureProperties = new Dictionary<object, object>();

2)在类映射中添加了以下部分:

1
2
3
4
<dynamic-component name='_infrastructureProperties' access='field'>
  <property name='CreateBy' column='CreatedBy' />
  <property name='CreateDate' column='CreatedDate' />
</dynamic-component>

3)实现了一个拦截器,用于设置这些属性值。

4)可选。我们还可以通过配置每个类在应用程序中扮演的"角色"来实现种类设置,然后在Interceptor中使用角色特定的属性。例如。此配置可以声明Product为TenantScopeObject,拦截器将在系统中记录当前租户身份的值中设置名为TenantID的属性。


您可能想尝试查看NHibernate的IUserType。

在下一页的底部是一个示例,其中ayende从实体中删除了一些加密逻辑,并允许NHibernate照顾它。

http://ayende.com/Blog/archive/2008/07/31/Entities-dependencies-best-practices.aspx


使用NHibernate的ICompositeUserType和
在NHibernate中创建一个时间戳拦截器

我发现这些文章很有用。显然,它不是PI,因为您与NH / SQL有联系。

现在,大多数IoC容器都带有拦截器,因此您可以拦截更改并将它们排队。如果UoW刷新了您的更改,则您也可以保留审核跟踪。


这与"不添加这些属性"不同,但是我上次看到时,工程师通过实现具体的NHibernate类并从实现了您不喜欢的属性的通用抽象基类(例如MyAuditable)中派生了解决方法。这样,您只需解决一次问题。


推荐阅读

    linux扩展文件命令?

    linux扩展文件命令?,工作,地址,系统,信息,命令,目录,管理,情况,文件,标准,Lin

    linux更改扩展命令?

    linux更改扩展命令?,管理,地址,数据,工作,系统,在线,工具,命令,环境,单位,Lin

    重启计算机命令linux?

    重启计算机命令linux?,系统,工作,命令,服务,标准,设备,灵活,首要,意义,参数,L

    linux计算机的命令?

    linux计算机的命令?,系统,工作,信息,设备,技术,命令,网站,管理,灵活,基础,lin

    linux查看扩展名命令?

    linux查看扩展名命令?,工作,系统,地址,信息,软件,文件,标准,电脑,命令,目录,L

    linux用计算器的命令?

    linux用计算器的命令?,代码,环境,情况,异常,工具,数据,位置,平台,精密,设计,

    linux的数学计算命令?

    linux的数学计算命令?,工作,系统,信息,地址,数字,目录,命令,百分比,情况,管

    linux命令设置扩展屏?

    linux命令设置扩展屏?,工具,系统,电脑,技术,软件,装备,情况,工作,命令,显示

    linux云计算查看命令?

    linux云计算查看命令?,系统,信息,地址,工作,命令,情况,标准,服务,软件,网络,l

    linux打开计算器命令?

    linux打开计算器命令?,密码,电脑,工作,设备,数字,系统,手机,指数,情况,服务,

    linux磁盘扩展命令?

    linux磁盘扩展命令?,在线,信息,扩大,风险,磁盘,虚拟机,容量,分区,目录,链接,L

    linux命令查看包属性?

    linux命令查看包属性?,时间,系统,信息,状态,命令,文件,通讯录,管理,情况,标

    linux命令输出计算?

    linux命令输出计算?,标准,地址,工作,信息,系统,命令,软件,数据,文件,控制台,l

    linux计算总数命令?

    linux计算总数命令?,系统,第一,情况,数据,信息,电脑,命令,百分比,单位,工作,l

    linux中扩展命令缩写?

    linux中扩展命令缩写?,网络,命令,信息,工作,管理,暂停,基础,公司,半导体,时

    linux中计算器命令?

    linux中计算器命令?,地址,数据,位置,网络,设备,时间,环境,平台,软件,命令,说

    linux怎么改扩展命令?

    linux怎么改扩展命令?,网络,密码,情况,软件,通用,地址,中心,环境,分区,根目

    linux退出计算器命令?

    linux退出计算器命令?,工作,地址,系统,命令,通信,信息,电脑,目录,路径,操作,

    重启计算机linux命令?

    重启计算机linux命令?,系统,设备,工作,标准,名称,命令,状态,数据,服务,提示,L

    linux计算器打开命令?

    linux计算器打开命令?,工作,地址,命令,标准,管理,系统,目录,路径,管道,控制