2011-08-31 70 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); 
    } 
} 
相關問題