大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们

无法控制sql的生成策略,所以必须不要让自己缺乏好的工具去监控sql,本篇给大家介绍的三种监控手段Log和SqlServer profile,ef profile。。。

一:Log监控

  这个属于entity framework自带的一个Action方法,它给大家带来了不错的用户体验,我们可以将其输出放到控制台,又或者写入到记事本中。。。这

里我就通过EDM来生成codefirst,可以看到如下的Database的Log定义,然后大家就可以给他灌入一个带string参数的Action方法,比如Console.WriteLine。

   static void Main(string[] args)
        {
using (SchoolDB2Entities dbContext = new SchoolDB2Entities())
{
dbContext.Database.Log = Console.WriteLine; dbContext.Students.Add(new Student()
{
StudentName = "jack123"
}); dbContext.SaveChanges();
}
}

由于codefirst初始化生成之时内容太多,无法一一显示出来。。。为了方便可灌入自定义方法AppendLog,比如将其灌入到File中。。。

二:SqlServer Profile

可以看到SqlServer Profile是放在sqlserver层面上的监控,可以监控到各种sql如何流入到sqlserver中,但是如果你默认开启的话,会看到很多与

ef无关的操作,比如下面这样:

那更好的方式是怎么过滤呢? 其实也很简单,我们只需要在ef的connectionstring中塞入一个App标记,然后在sqlserver profile上面进行筛选就可以了。

第一步:在connectionstring中加入applicationName

  <connectionStrings>
<add name="SchoolDB2Entities" connectionString="data source=.;initial catalog=SchoolDB2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
</connectionStrings>

第二步:在SqlProfile中筛选ApplicationName=EntityFramework的所有记录

ok,这样我们就配置好了,接下来我们将codefirst跑起来,可以清清楚楚的看到,现在的profile中仅仅只有EntityFramework标记生成的sql语句了。

监视EF生成SQL的方法(log , SqlServerProfile)的更多相关文章

  1. Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

    Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询     SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL ...

  2. 中间件解析FDMEMTABLE.delta生成SQL的方法

    遍历Delta.DataView.Rows,Delta.DataView.Rows是记录的行集,由行组成 TFDDatSRow,即是一行记录的对象 TFDDatSRow的方法:  GetData(), ...

  3. NET5 EF Core添加EF生成SQL日志记录

    1.添加NuGet包:Microsoft.Extensions.Logging.Debug 2.添加单独类库用于后期维护:BCode.DataBase.Log 3.添加EFCoreLoggerProv ...

  4. EF查看sql的方法

    using (context = new DataBaseContext()) { #region EF6.0 var listuser =context.dbuser.ToList(); Log.D ...

  5. PowerDesigner生成sql及HTML格式数据库文档

    一.PowerDesigner生成sql问题 生成sql的方法是 Database -->Generate Database (Ctrl + G ) 但是提示 Could not load VB ...

  6. 批量生成sql语句,难得

    在工作我们常常要批量生成sql文件,因为业务部门经常给我们的是excel文件,根据我的经验,推荐两种批量生成sql文件方式 1.excel批量生成sql ,sql语句如下 INSERT INTO Ta ...

  7. Asp.Net EF查看生成sql(MiniProfiler)

    查看ef生成的sql有很多种方法,这里介绍两种几种的方法 方法1:浏览器直接方法/Home/getsql直接查看sql //方法1:浏览器直接方法/Home/getsql直接查看sql public ...

  8. 两种查看EFCore生成Sql语句的方法

    一.利用反射生成查询语句 该方法转载自:https://jhrs.com/2019/28488.html (略有修改) using Microsoft.EntityFrameworkCore.Quer ...

  9. PD 15.1 安装 破解 , 简单使用 (一对多,多对多关系生成sql脚本) , CDM 和 PDM 的区别;PD15.1 生成sql2008 无FK外键约束的解决方法

    CDM是概念模型,在概念模型上没有具体数据库产品的概念,反映的是实体和联系.PDM是物理模型,是依赖具体数据库产品的模型,比如可以指定具体的数据类型和约束等等.在PowerDesigner中两个模型之 ...

随机推荐

  1. Vue 组件通信(组件间通信)

    1.中央事件总线bus <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&qu ...

  2. Errors occurred during the build

    Errors occurred during the build.Errors running builder 'Integrated External Tool Builder' on projec ...

  3. 08-hibernate注解-总结

    直接贴过来了: 1, 2,

  4. JDBC2.0操作:结果集,更新,插入,删除,批处理语句

    JDBC对ResultSet的支持 JDBC最重要的概念是批处理,可以一次完成多个语句的执行. 可滚动的结果集. 如果想创建可滚动的结果集,则在创建PrepareStatement时候必须指定创建的类 ...

  5. 阿里云云盘扩容数据盘_Linux

    随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘.   说明 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopp ...

  6. 带有key参数的函数filter,map,max,min

    内置函数———filter def is_not_empty(s): return s and len(s.strip()) > 0 filter(is_not_empty, ['test', ...

  7. 利用python进行泰坦尼克生存预测——数据探索分析

    最近一直断断续续的做这个泰坦尼克生存预测模型的练习,这个kaggle的竞赛题,网上有很多人都分享过,而且都很成熟,也有些写的非常详细,我主要是在牛人们的基础上,按照数据挖掘流程梳理思路,然后通过练习每 ...

  8. Android Studio 新手常见错误:Gradle DSL method not found: &#39;runProguard()&#39;

    在Android Studio上执行Github上的某Android开源项目,提示报错: Error:(20, 0) Gradle DSL method not found: 'runProguard ...

  9. unity, iterate immediate children and iterate all children

    遍历所有直接子节点(immediate children): foreach (Transform child in transform) { // do whatever you want with ...

  10. 计算机系统监控 PerformanceCounter

    PerformanceCounter 컴퓨터 성능 머니터링 CUP Processor 메모리 하터웨어 DB (CPU,User Connection,Batch Request,Blocking ...