【问题标题】:Retrieving SQL Generated by Entity Framework Core检索 Entity Framework Core 生成的 SQL
【发布时间】:2016-03-22 15:53:16
【问题描述】:

我正在尝试检索实体框架为以下 LINQ 查询生成的原始 SQL:

pagedItemResults = from firstItem in dbData.Accession
                        join secondItem in pagedRowNumberResults
                        on firstItem.AccessionNumber equals secondItem
                        select new PaginationResultRow
                        {
                            Number = firstItem.AccessionNumber,
                            ID = firstItem.AccessionId,
                            Name = firstItem.AcquisitionType.Name,
                            Description = firstItem.Description
                        };

虽然它可能非常简单,并且与以前版本的 EF 已经存在的其他答案相似,但我没有运气,也没有在网上找到任何东西.. 有什么想法吗??

【问题讨论】:

  • 尝试在 SQL 实例上运行跟踪?
  • 我知道在普通实体框架上你可以只做pagedItemResults.ToString() 并且它会输出查询字符串,你不能在核心上这样做吗?

标签: c# sql entity-framework linq


【解决方案1】:

您可以通过实现ILoggerProvider 来开启日志记录。请参阅文档中的 details

您只需要使用单个上下文实例注册记录器。注册后,它将用于同一 AppDomain 中上下文的所有其他实例。

        using (var db = new BloggingContext())
        {
            var serviceProvider = db.GetInfrastructure<IServiceProvider>();
            var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
            loggerFactory.AddProvider(new MyLoggerProvider());
        }

您还可以定义要记录的类别。

    private static string[] _categories =
    {
        typeof(Microsoft.Data.Entity.Storage.Internal.RelationalCommandBuilderFactory).FullName,
        typeof(Microsoft.Data.Entity.Storage.Internal.SqlServerConnection).FullName
    };

【讨论】:

  • 注意,我认为他可能正在使用 ASP.NET 核心,根据文档,它仍然可以工作,但它对注册记录器需要做什么的说明略有不同。
【解决方案2】:

您可以通过以下方式将生成的 tsql 记录到输出窗口:

Microsoft.Extensions.Logging.Debug

首先,从Nuget 获取它,然后在您的上下文中,您必须定义一个LoggerFactory

之后,在您的上下文中在OnConfiguring 中使用它。

public static readonly Microsoft.Extensions.Logging.LoggerFactory _loggerFactory =
                    new LoggerFactory(new[] {
                    new Microsoft.Extensions.Logging.Debug.DebugLoggerProvider()
    });

optionsBuilder.UseLoggerFactory(_loggerFactory);

【讨论】:

    【解决方案3】:

    我真的很喜欢 MiniProfiler,请参阅 http://miniprofiler.com/。如果没有这样的东西,我会说你必须在实际数据库上使用分析器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 2021-08-28
      相关资源
      最近更新 更多