使用AOP技术拦截ADO.Net

使用AOP技术拦截ADO.Net,.net,ado.net,aop,castle,dynamic-proxy,.net,Ado.net,Aop,Castle,Dynamic Proxy,我有相当大的代码库,使用各种不同的ADO技术(例如,一些EF,在某些情况下直接使用ADO.Net) 我想知道是否有任何方法可以全局拦截任何ADO.Net调用,这样我就可以开始审核信息,如执行的确切SQL语句、所用时间、返回的结果等 其主要思想是,如果我能做到这一点,我不必更改任何现有代码,我应该能够拦截/包装ADO.Net。。。这可能吗 编辑 有人建议我研究,或者,但是我如何使用其中一个来获得所需的结果?否。如果您直接针对ADO.NET类型进行编码,您不能只告诉DynamicProxy:“嘿,在

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

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

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

编辑

有人建议我研究,或者,但是我如何使用其中一个来获得所需的结果?

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

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


    • vdh\u ant

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

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


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

      那么PostSharp、CciSharp或Posthough能够做到这一点吗?i、 e.即使代码上写着“new SqlComment()”,我也可以代理它…@vdh_ant:它们通过重写IL来工作,因此原则上它们可以做几乎任何事情。好的,回到手头的问题,我将如何使用其中任何一个来做我需要的事情?i、 e.使用SqlCommand并包装它,这样我就可以得到我需要的信息…@vdh_ant:这是另一个问题。我会在每个工具上发布一个问题,然后使用答案进行比较。这似乎是一个多余的问题相反,只需问一次问题,并涵盖所有方面。@RockingtheSixstring请不要投票否决我,请删除您的评论。我被要求这样做,请看(阅读评论!)-