NHibernate动态更新无法更新拦截器中更改的数据

NHibernate动态更新无法更新拦截器中更改的数据,nhibernate,Nhibernate,如果我设置dynamic update=true,我发现在拦截器中更新的字段不会包含在数据库的update语句中。当我将其设置为false时,包括时间戳在内的所有列都会更新。我真的想使用动态更新 public class Interceptor : EmptyInterceptor { public override Boolean OnFlushDirty(object entity, object id, object[] state, object[] previousStat

如果我设置dynamic update=true,我发现在拦截器中更新的字段不会包含在数据库的update语句中。当我将其设置为false时,包括时间戳在内的所有列都会更新。我真的想使用动态更新

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);
  }

}
我原以为这一行会将我上次修改的列标记为dirty

auditEntity.LastModifiedTimestamp = now;
我应该在我的拦截器中做些什么来将时间戳字段标记为脏的吗?

API文档说:“如果用户以任何方式修改了当前状态,则返回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);
  }

}

成功了。谢谢我想我已经试过了,但最近我尝试了很多不同的东西。