监视EF生成SQL的方法(log , SqlServerProfile)

大家在学习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语句了。

时间: 2024-10-09 03:35:45

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

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

Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询 SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL代码. 但是,EF 连接MYSQL 之后,部分代码没法查询EF生成的SQL 代码,如下代码: db.BaseDept.Remove(basedept)的时候, db.BaseDept打断点,查询到的是select 语句, Remove之后,就变成执行结果了,具体生成的DELETE 的SQL 代码无法查看.

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

一.PowerDesigner生成sql问题 生成sql的方法是 Database -->Generate Database (Ctrl + G ) 但是提示 Could not load VBScript engine. Check VBScript installation. Generation aborted due to errors detected during the verification of the model. 检查了好久 发现将check model 去掉就可以了!其

自己动手写ORM(01):解析表达式树生成Sql碎片

什么是ORM框架:   ORM即对象关系映射(Object Relational Mapping,简称ORM),是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中. 自己也用过很多ORM框架,比如微软的EF,Hibernate.轻量级一点的有Depper等等.这些框架说白了就是让我们能像操作对象那样去操作数据库. 鄙人是个比较懒的程序猿,总想这写更少的代码做更多的事情,最近不是很忙,于是

sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

SQL Server数据库备份有两种方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志文件ldf的方式.下面将主要讨论一下后者的备份与恢复.本文假定您能熟练使用SQL Server Enterprise Manager(SQL Server企业管理器)和SQL Server Quwey Analyser(SQL Server查询分析器) 1.正常的备份.恢复方式 正常方式下,我们要备份一个数据库,首先要先将该数据库从运行的数据服务器中断

Mybatis-Plus BaseMapper自动生成SQL及MapperProxy

目录 Spring+Mybatis + Mybatis-Plus 自定义无XML的sql生成及MapperProxy代理生成 问题产生背景 框架是如何使用 无Xml的SQL是如何生成生成及SQL长成什么样 MapperProxy代理生成 总结 Spring+Mybatis + Mybatis-Plus 自定义无XML的sql生成及MapperProxy代理生成 问题产生背景 现在新服务ORM框架是使用mybatis3.4.6.mybatis-plus2.2.0. 最近在项目中偶然发现Coupon

PowerDesigner生成sql脚本

1.打开PowerDesigner->New Project; 2.填写项目名称,选择文件的存放路径: 3.新建一个模型,New Model: 4.选择概念模型,填写模型名称: 5.选择entity,创建实体模型: 6.点击模型图,填写表结构信息: 时间类型的数据格式说明: 对于创建过程中出现相同字段的情况处理: 更改前: 更改后: 7.将表结构创建完成后,进行表之间的关联,点击relationship将表与表直接关联起来: 选择表与表之间的关系: 8.生成物理模型图: 选择数据库类型 软件会自

利用反射生成SQL语句

// 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBuilder sbSql = new StringBuilder("update Students set "); // 先获得model 的Type类型 Type modeType = model.GetType(); // 通过Type类型得到它所有的公开属性 PropertyInfo[]

使用Java注解开发自动生成SQL

使用注解开发的好处就是减少配置文件的使用.在实际过程中,随着项目越来越复杂,功能越来越多,会产生非常多的配置文件.但是,当配置文件过多,实际维护过程中产生的问题就不容易定位,这样就会徒劳的增加工作量.而使用注解开发,可以减少配置文件的使用,方便代码的维护,同时,在开发速度上也有大幅提升,因此,学会使用注解开发,是有必要掌握的一项技能. 下面为各位展示下使用注解开发自动生成SQL语句的过程. 首先先定义一个实体类,用于和数据库字段进行映射,为了方便,数据库字段名称和实体类变量名称保持一致. pac

由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例

/”应用程序中的服务器错误. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭. 堆栈跟踪: [SqlException (0x80131904): 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例.请确保该用户在此计算机上有本地用户配置文件.该连接将关闭.] System.Data.SqlClient.SqlInternalConnection.OnErro