2011-08-31 2 views
0

Fluent NHibernate에서 NHibernate를 사용하고 SaveOrUpdate 유형의 EventListener를 등록합니다.EventListener (Fluent NHibernate에 등록 됨)가 데이터베이스 업데이트를 방지합니다.

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. :

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

이 리스너는 다음과 같습니다 이 방법의 경우 :

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); 
    } 
} 
관련 문제