EF-记录程序自动生成并执行的sql语句日志
在EntityFramework的CodeFirst模式中,我们想将程序自动生成的sql语句和执行过程记录到日志中,方便以后查看和分析。
在EF的6.x版本中,在DbContext中有一个Database属性,Database.Log就是用来专门记录这种日志的。
Database.Log是一个Action<string>委托,给其赋值一个函数就行。
代码如下:
using Model;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace DAL {
public class DemoContext:DbContext {
//使用name=EFDemo的连接字符串
public DemoContext() : base("EFDemo") { //设置数据库初始化方式 为 迁移(更新)数据库到最新的版本
//DemoContext 映射数据库和表
//DAL.Migrations.Configuration 是迁移配置
Database.SetInitializer(new MigrateDatabaseToLatestVersion<DemoContext, DAL.Migrations.Configuration>()); //将执行的sql语句记录到日志
Database.Log = message=>Console.WriteLine("[{0}]{1}-- {2}",Thread.CurrentThread.ManagedThreadId,DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff"),message.Trim());
} //Students属性对应数据库中的Student表
public virtual DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
}
}
}
应用程序中的代码如下:
using (DemoContext context = new DemoContext()) {
//在使用模型类之前需要强制创建数据库 true:强制创建
context.Database.Initialize(true);
#region 新增
Student stu = new Student {
Name = "赵子成",
BirthDay = DateTime.Parse("1990-08-01"),
Age =
};
//新增一个Student实体,相当于在Student表中,新增一条数据
context.Students.Add(stu);
//保存
context.SaveChanges();
#endregion
}
日志记录的结果如下:
[]// ::28.971-- Opened connection at // :: +:
[]// ::28.972-- Started transaction at // :: +:
[]// ::28.977-- DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Student]([Name], [BirthDay], [Age], [Address])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@, @, @, NULL)
SELECT t.[ID], t.[RowVersion]
FROM @generated_keys AS g JOIN [dbo].[Student] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT >
[]// ::28.977--
[]// ::28.978-- -- @: '赵子成' (Type = String, Size = )
[]// ::28.978-- -- @: '1990/08/01 00:00:00' (Type = DateTime2)
[]// ::28.978-- -- @: '' (Type = Int32)
[]// ::28.978-- -- Executing at // :: +:
[]// ::28.993-- -- Completed in ms with result: SqlDataReader
[]// ::28.993--
[]// ::28.995-- Committed transaction at // :: +:
[]// ::28.996-- Closed connection at // :: +:
EF-记录程序自动生成并执行的sql语句日志的更多相关文章
- 用Hibernate框架把hql生成可执行的sql语句-Oracle方言
引言:为什么这样的需求,源自公司项目需要,公司的项目使用java的struts2+spring2.5+oracle中间件tuxedo,数据库用的是Oracle,但由于不直接连接数据库,用中间件处理的方 ...
- 一个自动生成插入与更新SQL语句的小类
无需关注字段类型,只要传入字段名与值的集合,自动生成Ms sql server SQL语句.详见Test()方法 using System; namespace Fan.iData.SqlUtilit ...
- 使用Mysql中的concat函数或正则匹配来快速批量生成用于执行的sql语句
背景介绍 今天需要给一张表里面补数据,需要按照行的维度进行update,如果是个别数据那么直接写update语句就可以了,但是场景要求的是将整表的数据进行update,要实现这个需求就不能只靠蛮力了, ...
- 程序自动生成Dump文件
前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...
- 程序自动生成Dump文件()
前言:通过drwtsn32.NTSD.CDB等调试工具生成Dump文件, drwtsn32存在的缺点虽然NTSD.CDB可以完全解决,但并不是所有的操作系统中都安装了NTSD.CDB等调试工具.了解了 ...
- EF 记录执行的sql语句
最近做了个中等的项目,数据不会很多,开发时间比较紧迫,所以用了EF的框架. 在使用过程中,发现有时候执行的结果不如预期,想看看执行的sql语句为何,遍查找资料,在网上找到了相关辅助类,拿来使用,部署到 ...
- java:Hibernate框架3(使用Myeclipse逆向工程生成实体和配置信息,hql语句各种查询(使用hibernate执行原生SQL语句,占位符和命名参数,封装Vo查询多个属性,聚合函数,链接查询,命名查询),Criteria)
1.使用Myeclipse逆向工程生成实体和配置信息: 步骤1:配置MyEclipse Database Explorer: 步骤2:为项目添加hibernate的依赖: 此处打开后,点击next进入 ...
- Yii2获取当前程序执行的sql语句
1.Yii2获取当前程序执行的sql语句: $query = model::find(); $dataProvider = new ActiveDataProvider([ ...
- MySql使用show processlist查看正在执行的Sql语句
今天上班例行的查看了下服务器的运行状况,发现服务器特卡,是mysqld这个进程占用CPU到了99%导致的. 比较好奇是那个程序在使用mysql导致cpu这么高的,通过show processlist命 ...
随机推荐
- Codeforces 920F - SUM and REPLACE
920F - SUM and REPLACE 思路1: 线段树(982 ms) 每个点最多更新6次 代码: #include<bits/stdc++.h> using namespace ...
- css各种练习
2017年10月22日 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- nodejs实现文件的拷贝复制
var fs = require( 'fs' ), stat = fs.stat; /* 05 * 复制目录中的所有文件包括子目录 06 * @param{ String } 需要复制的目录 07 * ...
- 合并k个排序的列表 Merge k Sorted Lists
2018-11-25 22:58:52 问题描述: 问题求解: 本题可以使用优先队列高效的进行求解,整体的时间复杂度为O(nlogk). public ListNode mergeKLists(Lis ...
- Linux awk命令详解 + 练习
https://www.cnblogs.com/ftl1012/p/9250541.html 练习步骤: 1.我先是在root文件下面创建一个yan.txt文件,然后在文件中随便敲了几个字符串,由空格 ...
- c# zfc
1.根据单个分隔字符用split截取 例如 复制代码代码如下: string st="GT123_1"; string[] sArray=st.split("_" ...
- 常见的ORACLE语句
基本 --新建表: create table table1( id varchar(300) primary key, name varchar(200) not null); --插入数据 inse ...
- 雷林鹏分享:jQuery EasyUI 数据网格 - 添加分页组件
jQuery EasyUI 数据网格 - 添加分页组件 本实例演示如何从服务器端加载数据,如何添加分页组件(pagination)到数据网格(datagrid). 创建数据网格(DataGrid) 为 ...
- 混合线性模型(linear mixed models)
一般线性模型.混合线性模型.广义线性模型 广义线性模型GLM很简单,举个例子,药物的疗效和服用药物的剂量有关.这个相关性可能是多种多样的,可能是简单线性关系(发烧时吃一片药退烧0.1度,两片药退烧0. ...
- spring boot ----> 和mybatis。。。
环境: centos6.8,jdk1.8.0_172,maven3.5.4,spring boot1.5.15 1.使用maven命令:mvn dependency:tree查看mybatis-spr ...