如何从异步查询到实体框架获取SQL查询?

时间:2018-07-23 14:53:30

标签: c# sql sql-server entity-framework debugging

编辑

每个indicated duplicate的日志记录在这里不适用,因为我在SQL Server上的用户帐户不是securityadmin角色的成员。我必须看看替代方法。

问题

我想记录实体框架传递给我的数据库的查询。通常,我会使用SQL Profiler来查看查询,但是在这种特殊情况下,数据库管理员没有授予我的用户权限以允许这样做。

我的查询如下:

var leads = await _context.EmailStatus.Where(x => !x.Deleted && x.SoftwareId == softwareId).ToListAsync();

要获取sql查询,我做了看似有意义的操作(但显然不起作用):

var query = ((System.Data.Entity.Core.Objects.ObjectQuery)leads.AsQueryable()).ToTraceString();
Logger.LogInfo($"Query to get leads is {query}");

由于此操作无效,因此我对此进行了调整:

var query = ((System.Data.Entity.Core.Objects.ObjectQuery)_context.EmailStatus.Where(x => !x.Deleted && x.SoftwareId == softwareId)).ToTraceString();

两次尝试都有略有不同的错误:

  

无法转换类型为“ System.Data.Entity.Infrastructure.DbQuery`1 [EmailTracker.Models.EmailStatus]”的对象来键入“ System.Data.Entity.Core.Objects.ObjectQuery”。

那么我如何获得实体框架来给我发送到数据库的实际SQL查询?

0 个答案:

没有答案