Использование методов АОП для перехвата ADO.Net

У меня довольно большая кодовая база, использующая различные технологии ADO (например, некоторые EF, а в некоторых случаях напрямую ADO.Net).

Мне интересно, существует ли какой-либо способ глобального перехвата любых вызовов ADO.Net, чтобы я мог начать аудит такой информации, как точные операторы SQL, которые выполнялись, время, возвращаемые результаты и т. Д.

Основная идея заключается в том, что если я смогу это сделать, мне не нужно будет менять какой-либо из моих существующих кодов, и что я смогу просто перехватить / обернуть ADO.Net... Возможно ли это?

РЕДАКТИРОВАТЬ

Было предложено, чтобы я посмотрел в PostSharp, CciSharp или Afterthought, но как я могу использовать один из них, чтобы получить желаемые результаты?

1 ответ

Решение

Нет. Если вы пишете код непосредственно для типов ADO.NET, вы не можете просто сказать DynamicProxy: "Эй, поместите прокси, где бы я ни использовал SqlConnection во всех этих DLL". DynamicProxy является генератором прокси во время выполнения. Кажется, что вы хотите AOP после компиляции, поэтому посмотрите вместо этого на PostSharp, CciSharp или Afterthought.

РЕДАКТИРОВАТЬ: если ни один из этих инструментов не достаточно, вы можете использовать Mono.Cecil для прямого изменения вашего IL, но это не легко. Смотрите, например:

vdh_ant:

Мне интересно, есть ли какой-либо способ для глобального перехвата любых вызовов ADO.Net, чтобы я мог начать аудит такой информации, как точные операторы SQL, которые выполнялись, затраченное время, возвращаемые результаты и т. Д.

Почему бы не использовать инструменты профилирования, доступные в вашей RDBMS? Они являются более общими в том, что они будут захватывать все операторы SQL и запросы независимо от конкретных API БД. Кроме того, они предоставляют стандартный анализ производительности и статистику прямо из коробки.

Другой вариант - написать своего собственного фиктивного провайдера ADO.NET, возможно, в качестве оболочки для классов System.Data.Common или рядом с вашим конкретным провайдером, если вам нужны функции, связанные с БД Эта оболочка может регистрировать необходимую информацию и делегировать реальную работу базовому поставщику.

Другие вопросы по тегам