NHibernate PreUpdate事件侦听器不会持久更改 [英] NHibernate PreUpdate event listener not persisting changes

查看:223
本文介绍了NHibernate PreUpdate事件侦听器不会持久更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有以下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;

返回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 =ModifiedDateinsert =false/>任何关于什么可以阻止事件监听器设置的值被传播到数据库的想法?

解决方案

你的表格映射有动态更新吗? NHibernate中有一个错误,可以防止PreUpdate和PreInsert使用动态更新。请参阅 http://www.mail-archive.com/nhusers@googlegroups。 com / msg13624.html


We have the following PreUpdate event listener:

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

Breakpoints on return statement indicate that the old / new state values and the entity properties have been updated to the expected values.

However running Sql profiler shows that the ModifiedDate / ModifiedBy values are not updated.

If I update the persistence code and set the ModifiedDate manually, Profiler shows the ModifiedDate being updated.

The mapping file for the majority of our entities is:

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

Any thoughts as to what could be preventing the values set by the event listener from being propogated to the database?

解决方案

Do you have dynamic-update in your table mappings? There's a "bug" in NHibernate that prevents PreUpdate and PreInsert from working with dynamic-update. See http://www.mail-archive.com/nhusers@googlegroups.com/msg13624.html

这篇关于NHibernate PreUpdate事件侦听器不会持久更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆