开发者

Eventlistener (registered in Fluent NHibernate) prevents update of database

开发者 https://www.devze.com 2023-04-01 09:51 出处:网络
I use NHibernate with Fluent NHibernate and register a Eventlistener of type SaveOrUpdate. private static ISessionFactory CreateSessionFactory()

I use NHibernate with Fluent NHibernate and register a Eventlistener of type SaveOrUpdate.

private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
            .ExposeConfiguration(c => c.SetListener(NHibernate.Event.ListenerType.SaveUpdate, new SaveEventListener()))
            .Buil开发者_运维百科dSessionFactory();
    }

The listener looks like this:

public class SaveEventListener : ISaveOrUpdateEventListener
{
    public void OnSaveOrUpdate(SaveOrUpdateEvent _event)
    {
        object entity = _event.Entity;
        if (entity is CreatableEntity)
        {
            CreatableEntity cEntity = entity as CreatableEntity;
            if (cEntity != null)
            {
                if (cEntity.IsNew)
                {
                    cEntity.TimeStamp = TimeStamp.New();
                }

                else
                {
                    cEntity.TimeStamp = TimeStamp.Updated(cEntity.TimeStamp);
                }
            }
        }
    }          
}

The listener is successfully called f.ex. in this method:

public void Create(string firstName, string lastName, string organization)
    {
        session = GetCurrentSession();
        ITransaction transaction = session.BeginTransaction();

        try
        {
            Person person = new Person(firstName, lastName, organization);
            session.SaveOrUpdate(person); //at this point
            transaction.Commit();
        }
        catch
        {
            transaction.Rollback();
            throw;
        }

        finally
        {
            session.Close();
        }
    }

BUT the database is not updated (this works fine without the listener registered). Any help is appreciated.


You should call the default event listener.

class SaveEventListener : DefaultSaveOrUpdateEventListener
{
    public override void OnSaveOrUpdate(SaveOrUpdateEvent _event)
    {
       // ....

       base.OnSaveOrUpdate(event);
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消