var dc=new DBDataContext(); TextWriter tw = new StringWriter(); dc.Log = tw; var list = dc.News.Skip((page - 1) * limit).Take(limit).ToList(); Utils.Logger.InfoLog("page:"+page+" limit:"+limit+" sql:"+tw); BE06A616-4586-4795-…
目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在此总结整理一下. EF Core性能调优 如果你的项目中使用了EF Core, 且正在处于性能调优阶段,那么了解EF Core生成的SQL语句是非常关键的.那么除了使用第三方工具,如何查看EF Core生成的SQL语句呢?这里笔者将给出一个基于.NET Core内置日志组件的实现方式. 创建一个实例…
Entity Framework 4.0 中是这样的,高版本的跟这个有些差异,不太一样,貌似已经到7了 using (Entities entities = new Entities()) { var query = from st in entities.ShiTi select st; ObjectQuery oq = query as ObjectQuery; string sql = oq.ToTraceString(); Console.WriteLine(sql); }…
EF Core 没有直接提供像 EF6 那样方便的在日志中记录最终生成的 SQL 的功能,可以通过官方提供的日志记录(Microsoft.Extensions.Logging)实现. 一. 使用 Microsoft.Extensions.Logging.Debug 查看生成的SQL语句 1. 创建项目, 连接数据库(过程略,参考文档) 2. 通过nuget添加引用 Microsoft.Extensions.Logging.Debug 3. 找到EF的DbContext文件,头部引用 using…
用sqlsever追踪最后的sql语句. 返回IQueryable<T>类型, 里面封装的就是生成的SQL脚本,设置断点queryable = DataContext.Set<T>().Where<T>(whereLambda).AsQueryable(); queryable 右键快速监视, 或者ToString()返回字符串类型直接打印输出都能看到sql脚本. 打开SQLServer - 工具 - SQL Server Profiler 上查看执行的SQL语句.…
使用Nhibernate开发一般都要对Nhibernate生成的sql语句进行查看及分析,查看Nhibernate生成的sql语句,可以使用NHProfiler和log4net.但NHProfiler是要付费的(当然,在天朝,你懂的……),用log4net配置比较麻烦.今天在网上查看Linq to Nhibernate资料的时候发现了一个工具LinqPad,于是又找了相关资源,发现它还真能实现Nhibenate语句的查看.废话少说,看下面的使用方法吧! 1. 下载LinqPad,地址:http:…
查看Linq to Sql生成的sql语句   在控制台项目中,比较简单,直接db.Log = Console.Out;就OK了 但是在其他项目中,需要处理如下: StreamWriter sw = new StreamWriter("F:\\Linqlog.txt", true); db.Log = sw; ......//Linq to Sql代码 sw.Close(); 然后就可以去txt文件中查看了…
           Entity Framework为我们提供了很大的方便,但有时候,我们想看看EF生成的Sql语句到底是怎样的,一种方式是我们可以启用Sql Server Profer工具.今天介绍另外一种方式,非常简单,可以监听EF执行的每条Sql语句,而且也可以自定义在执行语句前,执行语句完成后的动作.通过这种方式也可以非常方便的去监听系统的运行日志.            完成这个功能,需要引入二个第三方的组件,分别是Clutch.dll和Clutch.Diagnostics.Enti…
开始 EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧; class EFIntercepterLogging : DbCommandInterceptor { private readonly Stopwatch _stopwatch = new…
EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我们更加方便的了解到EF运行时的一些信息,当然我们最想看的还是EF生成的Sql语句,话不多讲,开始干吧; /// <summary> /// 抓取EF执行时的SQL语句 /// </summary> public class EFIntercepterLogging : DbComman…