2008-09-18 108 views
4

如何通過NHibernate更新/插入實體時設置一些特殊的列值,而無需擴展具有特殊屬性的域類?NHibernate,審計和計算列值

E.g.每個表都包含像CreatedBy,CreatedDate,UpdatedBy,UpdatedDate這樣的審計列。但我不想將這些屬性添加到域類。我想盡可能地保持域模式的Percistence Ignorance因子。

回答

0

它與「不添加這些屬性」不一樣,但最後一次看到這個,工程師通過實現具體的NHibernate類並從通用抽象基類(例如MyAuditable)派生它們來解決它,該類實現了屬性你不喜歡。這樣你只需要解決一次這個問題。

1

黑客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中使用特定於角色的屬性。例如。這個配置可能會聲明產品是TenantScopeObject,並且攔截器會將當前租戶身份值中名爲TenantID的屬性設置爲記錄在系統中。

+0

你能指出我你的方法的完整樣本? – 2009-03-23 09:23:46