监听Entity Framework生成的Sql语句

Entity Framework为我们提供了很大的方便,但有时候,我们想看看EF生成的Sql语句到底是怎样的,一种方式是我们可以启用Sql Server Profer工具。今天介绍另外一种方式,非常简单,可以监听EF执行的每条Sql语句,而且也可以自定义在执行语句前,执行语句完成后的动作。通过这种方式也可以非常方便的去监听系统的运行日志。


完成这个功能,需要引入二个第三方的组件,分别是Clutch.dll和Clutch.Diagnostics.EntityFramework.dll(网上可以下载到)。引入之后,只需要实现IDbTracingListener接口:


public class TestListener : IDbTracingListener
{
    public void CommandExecuted(DbTracingContext context)
    {
        Debug.WriteLine(context.Command.CommandText);
    }
              
    public void CommandExecuting(DbTracingContext context)
    {
        //throw new NotImplementedException();
    }
              
    public void CommandFailed(DbTracingContext context)
    {
        //throw new NotImplementedException();
    }
              
    public void CommandFinished(DbTracingContext context)
    {
        //throw new NotImplementedException();
    }
              
    public void ReaderFinished(DbTracingContext context)
    {
        //throw new NotImplementedException();
    }
}

接口中的几个方法,分别是Sql语句执行前,执行完成后等要执行的方法,你可以在这个方法里面做任何事.更关键的是它的参数DbTracingContext里面有你想要的一切,包括生成的Sql语句.


把这个接口实现后,你只需要在Context里面加上监听即可.


DbTracing.Enable();
DbTracing.AddListener(new TestListener());


知识共享许可协议
《监听Entity Framework生成的Sql语句》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

Warning: file_get_contents(http://ip.taobao.com/service/getIpInfo.php?ip=34.234.207.100) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 502 Bad Gateway in D:\wwwroot\changweihua\wwwroot\v\content\templates\darklight\vrecord.php on line 129

开发技术


开发平台和工具

sitemap     169.45ms