2009-11-20 49 views
2

如果我設置dynamic-update = true我發現在我的攔截器中更新的字段沒有包含在去到數據庫的update語句中。當我將它設置爲false時,包括時間戳的所有列都會更新。我真的想使用動態更新。NHibernate動態更新無法更新攔截器中更改的數據

public class Interceptor : EmptyInterceptor 
{ 
    public override Boolean OnFlushDirty(object entity, object id, object[] state, 
    object[] previousState, string[] propertyNames, IType[] types) 
    { 
    var auditEntity = entity as BaseAuditEntity; 

    if (auditEntity != null) 
    { 
     var now = DateTime.Now; 
     var index = Array.IndexOf(propertyNames, "LastModifiedTimestamp"); 
     state[index] = now; 
     auditEntity.LastModifiedTimestamp = now; 
    } 
    return base.OnFlushDirty(entity, id, state, previousState, propertyNames, types); 
    } 

} 

我以爲這條線可能會標記我最後修改的列爲髒。

auditEntity.LastModifiedTimestamp = now; 

有沒有什麼我應該在我的攔截器中將時間戳字段標記爲髒?

回答

3

API-Doc說:「如果用戶以任何方式修改了currentState,則返回true」。

您是否試圖返回true而不是調用空的基礎實現?

public class Interceptor : EmptyInterceptor 
{ 
    public override Boolean OnFlushDirty(object entity, object id, object[] state, 
    object[] previousState, string[] propertyNames, IType[] types) 
    { 
    var auditEntity = entity as BaseAuditEntity; 

    if (auditEntity != null) 
    { 
     var now = DateTime.Now; 
     var index = Array.IndexOf(propertyNames, "LastModifiedTimestamp"); 
     state[index] = now; 
     auditEntity.LastModifiedTimestamp = now; 

     return true; 
    } 
    return base.OnFlushDirty(entity, id, state, previousState, propertyNames, types); 
    } 

} 
+0

工作。謝謝!我以爲我已經嘗試過,但最近我一直在嘗試很多不同的東西。 – Jerry 2009-11-23 14:52:29