Eventlistener (зарегистрирован в Fluent NHibernate) предотвращает обновление базы данных - PullRequest
0 голосов
/ 31 августа 2011

Я использую NHibernate с Fluent NHibernate и регистрирую Eventlistener типа SaveOrUpdate.

private static ISessionFactory CreateSessionFactory()
    {
        return Fluently.Configure()
            .ExposeConfiguration(c => c.SetListener(NHibernate.Event.ListenerType.SaveUpdate, new SaveEventListener()))
            .BuildSessionFactory();
    }

Слушатель выглядит так:

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

Слушатель успешно называется f.ex. в этом методе:

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

НО база данных не обновляется (это прекрасно работает без регистрации слушателя). Любая помощь приветствуется.

1 Ответ

1 голос
/ 31 августа 2011

Вы должны вызвать прослушиватель событий по умолчанию.

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

       base.OnSaveOrUpdate(event);
    }
}
...