Como detectar se o objeto foi atualizado usando o Nibernate?
-
27-09-2019 - |
Pergunta
Preciso descobrir como executar alguma ação (cache de descarga) quando um objeto do tipo X é atualizado.
Então, quando eu salvo o objeto do tipo Y, nada é feito, quando economizo objeto inalterado do tipo X, nada deve acontecer, mas quando esse objeto é alterado e a atualização é feita, eu quero conhecê -lo.
Eu tentei vários eventos de Nibernate (IPostUpdateEventListener
, IFlushEntityEventListener
, etc.) mas não conseguiu.
Alguém pode ajudar, por favor? Obrigado
Solução 2
Eu estava enfrentando um problema no método implementado, porque em alguns casos tive que chamar o mesmo método na implementação padrão, caso contrário, o caminho do código terminou no meu código.
private readonly DefaultFlushEntityEventListener _impl = new DefaultFlushEntityEventListener();
public void OnFlushEntity(FlushEntityEvent flushEntityEvent)
{
... my code goeas here ...
_impl.OnFlushEntity(flushEntityEvent);
}
No método de onflui de IFlushEntityEventListener
Não posso detectar propriedades sujas ... etc.
Mas o que realmente funciona é (obrigado Andrew) é este código
public void OnPostUpdate(PostUpdateEvent postUpdateEvent)
{
var dirtyProperties = postUpdateEvent.Persister.FindDirty(postUpdateEvent.State, postUpdateEvent.OldState, postUpdateEvent.Entity, postUpdateEvent.Session);
int dirty = dirtyProperties.Length;
if (dirty == 0) // I want detect only modififed entities
return;
Trace.WriteLine(string.Format("OnPostUpdate({0}, {3}) in session#{1} - dirty props. {2}", postUpdateEvent.Entity.GetType().Name, postUpdateEvent.Session.GetHashCode(), dirty, postUpdateEvent.Entity.GetHashCode()));
lock (_objects)
{
if (!_objects.Contains(postUpdateEvent.Entity)) // I will manipulate this list in `AbstractFlushingEventListener.PostFlush` method
_objects.Add(postUpdateEvent.Entity);
}
}
Outras dicas
você quer um IPostUpdateEventListener
. Por que você não posta seu código que não funciona, então podemos ajudar;)