EF6基础系列(17)---记录数据库命令

Posted wyy1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF6基础系列(17)---记录数据库命令相关的知识,希望对你有一定的参考价值。

这一节介绍EF6怎么记录发送给数据库的查询和操作命令。

以前给了查看EF发送给数据库的命令我们需要借助数据库的追踪工具或者第三方追踪工具,现在EF6中提供了DbContext.Database.Log属性(Action<string>类型),使用这个属性我们可以很方便地记录EF发送给数据库的命令。

下边是一个栗子:

        static void Main(string[] args)
        {
            using (EFDbContext context=new EFDbContext())
            {
                context.Database.Log = Console.WriteLine;
                var std1 = context.Students.Find(1);
                std1.Name = "newName";
                context.SaveChanges();
                Console.ReadKey();
            }
           
        }

 

输出如下:

技术分享图片

在上边的栗子中,Console.Write()方法属于Action<string>类型,所以可以赋值给Log属性。可以看到EF打开和关闭数据库,执行查询,和使用事务进行CUD都会被记录下来。

我们也可以自定义一个Action<string>委托的实例赋值给Log属性:

public class Logger
{
    public static void Log(string message)
    {
        Console.WriteLine("EF Message: {0} ", message);
    }
}

class EF6Demo
{
    public static void DBCommandLogging()
    {
        using (var context = new SchoolDBEntities())
        {
                
            context.Database.Log =  Logger.Log;                
            var std1 = context.Students.Find(1);
            std1.Name = "newName";
            context.SaveChanges();
            Console.ReadKey();
        }
    }
}

 

以上是关于EF6基础系列(17)---记录数据库命令的主要内容,如果未能解决你的问题,请参考以下文章

EF6基础系列(九)---预先加载延迟加载显示加载

EF6基础系列(五)---EF中的实体关系

EF6基础系列(12)--- EF进行批量添加/删除

EF6基础系列(十一)---EF6中的异步查询和异步保存

EF6 自定义迁移表名

EF6基础系列(十)---离线场景保存实体和实体图集