如何记录SQL查询

时间:2018-07-07 13:47:12

标签: entity-framework aspnetboilerplate

我想记录SQL查询,以检查LINQ查询到底在做什么,以了解如何改进它。

但是我找不到如何记录它。

请帮助我。

2 个答案:

答案 0 :(得分:1)

如果您将MSSQL与EF一起使用,并打算解决如何将LINQ转换为SQL语句的问题。您可以尝试与MSSQL数据库引擎一起提供的SQL事件探查器

使用SQL事件探查器,您可以在其中记录和跟踪tsql事件。通过正确隔离应用程序中的LINQ调用,您可以跟踪数据库引擎接收到的SQL语句。

https://docs.microsoft.com/en-us/sql/relational-databases/event-classes/tsql-event-category?view=sql-server-2017

答案 1 :(得分:1)

我这样做是这样的: 在EntityFramework项目中更改DbContextConfigurer 为:

 public static void Configure(DbContextOptionsBuilder<TestDbContext> builder, string connectionString, **ILoggerFactory loggerFactory = null**)
    {
        **builder.UseLoggerFactory(loggerFactory);**

        builder.UseSqlServer(connectionString);
    }

然后将文件MyProjectEntityFrameworkCoreModule.cs添加到PreInitiallize部分

public override void PreInitialize()
    {
        if (!SkipDbContextRegistration)
        {
            Configuration.Modules.AbpEfCore().AddDbContext<TestDbContext>(options =>
            {
                if (options.ExistingConnection != null)
                {

                    TestDbContextConfigurer.Configure(options.DbContextOptions, options.ExistingConnection);
                }
                else
                {
                    **var loggerFactory = IocManager.Resolve<ILoggerFactory>();**
                    TestDbContextConfigurer.Configure(options.DbContextOptions, options.ConnectionString,**loggerFactory**);
                }
            });
        }

        //Uncomment below line to write change logs for the entities below:
        //Configuration.EntityHistory.Selectors.Add("TestEntities", typeof(OrganizationUnit), typeof(Role), typeof(Tenant));
    }