NHibernate PreUpdate事件侦听器不持久更改

时间:2010-12-08 01:36:34

标签: nhibernate events listener

我们有以下PreUpdate事件监听器:

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

return语句上的断点表示旧/新状态值和实体属性已更新为预期值。

但是,运行Sql Profiler会显示ModifiedDate / ModifiedBy值未更新。

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

我们大多数实体的映射文件是:

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

有什么想法阻止事件监听器设置的值被传播到数据库?

1 个答案:

答案 0 :(得分:4)

您的表映射中是否有动态更新? NHibernate中存在一个“bug”,阻止PreUpdate和PreInsert使用动态更新。见http://www.mail-archive.com/nhusers@googlegroups.com/msg13624.html