2011-08-31 69 views
0

我使用NHibernate和Fluent NHibernate并注册一个类型为SaveOrUpdate的Eventlistener。Eventlistener(在Fluent NHibernate注册)阻止更新数据库

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

您应该调用默认事件侦听器。

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

     base.OnSaveOrUpdate(event); 
    } 
} 
相关问题