2

我有相当大的代码库,使用各种不同的 ADO 技术(即一些 EF,在某些情况下直接使用 ADO.Net)。

我想知道是否有任何方法可以全局拦截任何 ADO.Net 调用,以便我可以开始审计信息,例如执行的确切 SQL 语句、花费的时间、返回的结果等。

主要思想是,如果我能做到这一点,我不应该更改任何现有代码,并且我应该能够拦截/包装 ADO.Net... 这可能吗?

编辑

有人建议我查看PostSharpCciSharpAfterthought,但是如何使用其中之一来获得所需的结果?

4

2 回答 2

1

不。如果您直接针对 ADO.NET 类型进行编码,您不能只告诉 DynamicProxy:“嘿,在我在所有这些 DLL 中使用 SqlConnection 的任何地方放置一个代理”。DynamicProxy 是一个运行时代理生成器。看来您需要编译后AOP,因此请查看PostSharpCciSharpAfterthought

编辑:如果这些工具都不够用,您可以使用 Mono.Cecil 直接更改您的 IL,但这并不容易。参见例如:

于 2011-05-03T17:00:29.730 回答
0

vdh_ant

我想知道是否有任何方法可以全局拦截任何 ADO.Net 调用,以便我可以开始审计信息,例如执行的确切 SQL 语句、花费的时间、返回的结果等。

为什么不使用RDBMS中可用的分析工具呢?它们更通用,因为它们将捕获所有SQL语句和查询,而不考虑特定的DB API。此外,它们提供开箱即用的标准性能分析和统计数据。

另一种选择是编写您自己的虚拟ADO.NET提供程序,如果您需要特定于 DB 的功能,则可能作为来自System.Data.Common或围绕您的特定提供程序的类的包装器。该包装器可以记录必要的信息并将实际工作委托给底层的本地提供者。

于 2019-03-22T13:30:29.843 回答