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

NHibernate PreUpdate event listener not persisting changes

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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。

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

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

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


您的表映射中有动态更新吗? NHibernate 中有一个"错误"会阻止 PreUpdate 和 PreInsert 使用动态更新。请参阅 http://www.mail-archive.com/[email protected]/msg13624.html