Мы хотели бы повторить только определенные Запросы, которые влияют на определенные типы объектов. < /p>
После нескольких поисков и тестов мы не нашли способ сделать это. Interceptor, а также слушатели, но ни одно решение, кажется, не работает.
Используется перехватчик для извлечения сгенерированного SQL, но нам не хватает контекста для его приложения.
Слушатели (ipostinserteventlistener, ipostupdateeventListener, ipostdeleteevitester) Больше параметров, но мы не можем найти способ получить необработанный запрос SQL. контекст объекта, на которой была выполнена операция. < /p>
Код: Выделить всё
public override SqlString OnPrepareStatement(SqlString sql)
{
// Only raw SQL
Console.WriteLine(sql);
return base.OnPrepareStatement(sql);
}
Код: Выделить всё
public class QueryListener(Configuration cfg) : IPreUpdateEventListener, IPostUpdateEventListener, IPreInsertEventListener, IPostInsertEventListener
{
public void Register()
{
cfg.EventListeners.PreUpdateEventListeners = [.. cfg.EventListeners.PreUpdateEventListeners, this];
cfg.EventListeners.PostUpdateEventListeners = [.. cfg.EventListeners.PostUpdateEventListeners, this];
cfg.EventListeners.PreInsertEventListeners = [.. cfg.EventListeners.PreInsertEventListeners, this];
cfg.EventListeners.PostInsertEventListeners = [.. cfg.EventListeners.PostInsertEventListeners, this];
}
public void OnPostUpdate(PostUpdateEvent @event)
{
// Capture SQL here ?
}
public bool OnPreUpdate(PreUpdateEvent @event)
{
// Capture SQL here ?
return false;
}
public bool OnPreInsert(PreInsertEvent @event)
{
// Capture SQL here ?
return false;
}
public void OnPostInsert(PostInsertEvent @event)
{
// Capture SQL here ?
}
#region Async methods
public Task OnPostUpdateAsync(PostUpdateEvent @event, CancellationToken cancellationToken)
{
OnPostUpdate(@event);
return Task.CompletedTask;
}
public Task OnPreUpdateAsync(PreUpdateEvent @event, CancellationToken cancellationToken)
{
return Task.FromResult(OnPreUpdate(@event));
}
public Task OnPreInsertAsync(PreInsertEvent @event, CancellationToken cancellationToken)
{
return Task.FromResult(OnPreInsert(@event));
}
public Task OnPostInsertAsync(PostInsertEvent @event, CancellationToken cancellationToken)
{
OnPostInsert(@event);
return Task.CompletedTask;
}
#endregion
}
Заранее спасибо за вашу помощь!
Подробнее здесь: https://stackoverflow.com/questions/794 ... nhibernate