Как воспроизвести SQL -запросы, сгенерированные Orm Nhibernate?C#

Место общения программистов C#
Ответить
Anonymous
 Как воспроизвести SQL -запросы, сгенерированные Orm Nhibernate?

Сообщение Anonymous »

В приложении C#, используя Nhibernate & Fluent nhibernate, мы стремимся захватить определенную вставку, обновление, удаление запросов, выполняемых в базе данных SQLite, чтобы воспроизвести их.
Мы хотели бы повторить только определенные Запросы, которые влияют на определенные типы объектов. < /p>
После нескольких поисков и тестов мы не нашли способ сделать это. Interceptor, а также слушатели, но ни одно решение, кажется, не работает.
Используется перехватчик для извлечения сгенерированного SQL, но нам не хватает контекста для его приложения.
Слушатели (ipostinserteventlistener, ipostupdateeventListener, ipostdeleteevitester) Больше параметров, но мы не можем найти способ получить необработанный запрос SQL. контекст объекта, на которой была выполнена операция. < /p>

Код: Выделить всё

public override SqlString OnPrepareStatement(SqlString sql)
{
// Only raw SQL
Console.WriteLine(sql);
return base.OnPrepareStatement(sql);
}
и, используя слушатели , мы получаем гораздо больше информации, мы можем понять контекст и объект, который изменяется, но мы не можем найти созданный SQL. < /p>

Код: Выделить всё

    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
}
В идеале мы хотели бы воспроизвести механизм Delta, предложенный Syncframework (https://github.com/egarim/syncframework/tree/main).
Заранее спасибо за вашу помощь!

Подробнее здесь: https://stackoverflow.com/questions/794 ... nhibernate
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»