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);
}
}
精彩评论