2010-12-08 81 views
4

我们有以下的更新前的事件侦听器:在return语句NHibernate的更新前的事件监听器不更改保存

public bool OnPreUpdate(PreUpdateEvent @event) 
     { 
      BaseBO entity = @event.Entity as BaseBO; 
      if (entity == null) 
       return false; 

      var operatorName = "OpName"; 
      var utcDateTime = DateTime.Now.ToUniversalTime(); 

      Set(@event.Persister, @event.State, "ModifiedBy", "Fred & Barney"); 
      Set(@event.Persister, @event.State, "ModifiedDate", utcDateTime); 

      entity.ModifiedBy = "fred & barney"; 
      entity.ModifiedDate = utcDateTime; 

      return false; 
     } 

private void Set(IEntityPersister persister, object[] state, string propertyName, object value) 
     { 
      var index = Array.IndexOf(persister.PropertyNames, propertyName); 
      if (index == -1) 
       return; 
      state[index] = value; 
     } 

断点指示旧/新的状态值和实体属性已更新为预期值。

但是运行Sql profiler表明ModifiedDate/ModifiedBy值没有更新。

如果我更新持久性代码并手动设置ModifiedDate,则Profiler会显示正在更新的ModifiedDate。

为广大实体的​​映射文件是:

<property name="ModifiedDate" insert="false" /> 

任何想法,以什么可以阻止事件监听器被传播到数据库中设置的值?

回答