• EF6学习笔记二十:简单日志记录


    要专业系统地学习EF推荐《你必须掌握的Entity Framework 6.x与Core 2.0》。这本书作者(汪鹏,Jeffcky)的博客:https://www.cnblogs.com/CreateMyself/

     我们来看看简单日志记录。

    用EF,毕竟最终还是对数据库的操作,那么怎么清楚地知道EF执行的SQL语句是什么样的?

    EF提供了日志记录功能

    针对IQueryable接口ToString()打印

    var res = ctx.Commodities.OrderBy(x => x.Price).Skip(1).Take(1);
    Console.WriteLine(res);

    生成的SQL如下,此时EF并没有执行这条SQL语句

    复制代码
    SELECT
        [Extent1].[Id] AS [Id],
        [Extent1].[Name] AS [Name],
        [Extent1].[Unit] AS [Unit],
        [Extent1].[Price] AS [Price],
        [Extent1].[FK_StoreId] AS [FK_StoreId],
        [Extent1].[AddTime] AS [AddTime]
        FROM [dbo].[tb_Commodities] AS [Extent1]
        ORDER BY row_number() OVER (ORDER BY [Extent1].[Price] ASC)
        OFFSET 1 ROWS FETCH NEXT 1 ROWS ONLY
    复制代码

    查询内存中的集合都是实现的 IEnumerable 接口,那么直接就是查询出数据

    查询远程数据实现的是IQueryable接口,所以我们可以直接打印它,就是SQL语句

    但是你不能有返回类型为IEnumberable的方法,比如ToList(),那么它就把数据拿到内存中来了。

    ctx.Database.Log

    用这个也是很爽的,前面我学EF,通过EF提供的这个,对我帮助还是很大的。

    这个Log是个Action<string>类型的,如果是控制台,可以顺手将Console.WriteLine赋值给它

    也可以自定义方法

    static void MyLog(string name, string msg)
            {
                Console.WriteLine($"{name}的跟踪:${msg}");
            }
     ctx.Database.Log = msg => MyLog("四海", msg);
     var res = ctx.Commodities.ToList();

     

    再来写入文件看看

     string path = AppDomain.CurrentDomain.BaseDirectory + "../../DBLog/DBLog.txt";
     StreamWriter sw = new StreamWriter(path) { AutoFlush = true };
     ctx.Database.Log = msg => sw.Write(msg);
     var res = ctx.Commodities.ToList();
     sw.Close();

    这是比较简单的日志打印,Database.Log提供的比较简单,我们自己的操作并不多。

    EF也提供了其他的接口,供我们更可控地记录日志。

  • 相关阅读:
    k8s的基本概念与基本功能
    STM32F030看门狗
    STM32F030低功耗
    STM32开发脱坑记
    ubuntu下安装wine并运行source insight
    Linux下使用Eclipse搭建ARM开发环境
    linux下的find文件查找命令与grep文件内容查找命令(转)
    STM32F030 BootLoader与应用程序的跳转设置
    MCU开发之MDK-ARM总结
    IIC协议总结
  • 原文地址:https://www.cnblogs.com/anyihen/p/12819545.html
Copyright © 2020-2023  润新知