跟踪EF生成的sql

1. dbContext里配置 ,core 3.1(详见官网:https://docs.microsoft.com/en-us/ef/core/miscellaneous/logging?tabs=v3): 

    public class BloggingContext : DbContext
    {
        #region DefineLoggerFactory
        public static readonly ILoggerFactory MyLoggerFactory
            = LoggerFactory.Create(builder => { builder.AddConsole(); });
        #endregion

        public DbSet<Blog> Blogs { get; set; }

        #region RegisterLoggerFactory
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            => optionsBuilder
                .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
                .UseSqlServer(
                    @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
        #endregion
    }

2. dotnet run,看看sql:

3.看看我的code

        /// <summary>
        /// 分页返回 module
        /// </summary>
        /// <param name="id"></param>
        /// <param name="title"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>  
        public PagedList<DocumentModuleResponse> GetAllByDocId(int id, string title,int pageIndex,int pageSize)
        {         
            return _documentModuleRepository.TableNoTracking.Include(i => i.SourceFile)
                .Where(w => (id == 0 || w.DocId == id) && (string.IsNullOrEmpty(title) || w.Title.Contains(title)))
                .Select(s => new DocumentModuleResponse
                {
                    Id = s.Id,
                    Name = s.SourceFile.Name,
                    Title = s.Title,
                    Status = s.Status,
                    RuleCodeId = s.RuleCodeId,
                    NodeNo = s.NodeNo,
                    NodeType = s.NodeType,
                    DocId = s.DocId,
                    Html = s.Html
                })
                .ToPagedList(pageIndex, pageSize);
        }

4.如果传个非空title?

5.结论:可见,EF很好的支持 IsNullOrEmpty ,Contains 等基础函数方法。遇到过有些function,EF转sql会不支持,但这么基础的,EF还是没问题的。

6.回头看第一个图,绿色上面已经有sql了?不需要配置??

于是,去掉dbContext里那句UseLoggerFactory,绿色 没了。(本来控制台就是可以查看的啊!)

7.有人用debug ,参考https://www.cnblogs.com/fancyblogs/p/10535214.html

  public static readonly LoggerFactory MyLoggerFactory = new LoggerFactory(new[] {
            new DebugLoggerProvider()
        });

        //public static readonly ILoggerFactory MyLoggerFactory
        //    = LoggerFactory.Create(builder => { builder.AddConsole(); });
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //optionsBuilder.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
            //optionsBuilder.UseMySql()
            //if (!optionsBuilder.IsConfigured)
            //{
                //var loggerFactory = LoggerFactory.Create(builder =>
                //{
                //    builder.AddFilter("Microsoft", LogLevel.Warning)
                //           .AddFilter("System", LogLevel.Warning)
                //           //.AddFilter("SampleApp.Program", LogLevel.Debug)
                //           .AddConsole();
                //});

                optionsBuilder.UseLoggerFactory(MyLoggerFactory).UseSqlServer("Server=zhoudelun.oldcoder.com,7000;Database=DB1;Uid = sa;Pwd =123;");
            //}
        }

vs输出窗口:

8.废话

为什么记这个?昨天有同事说   .Where(w => string.IsNullOrEmpty(title) || w.Title.Contains(title)) 这种写法不好

不可读,有安全隐患。

我挺郁闷的,我这是跟官网里学那个mvc3+EF 里虚拟大学demo看的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值