使用AOP技术拦截ADO.Net

问题描述 投票:2回答:2

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

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

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

编辑

有人建议我查看PostSharpCciSharpAfterthought,但我如何使用其中一种来获得理想的结果呢?

.net ado.net aop castle dynamic-proxy
2个回答
1
投票

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

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


0
投票

vdh_ant:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.