【问题标题】:View parameters passed to azure query via Linq to entity framework查看通过 Linq 传递给 azure 查询的参数到实体框架
【发布时间】:2013-02-01 17:42:44
【问题描述】:

我正在使用 linq to Entity 来查询 azure 数据库。 我已登录 azure 以查看给出特定问题的查询。我想实际查看传入的参数,但所有 azure 给我的都在下面。有没有办法在查询已经运行后查看参数(例如,更改代码以记录它们目前不是一个选项)。

当我登录到 azure 时,转到管理门户 - SQL 数据库 |查询性能 |选择特定查询。 我可以看到以下内容:问题是我看不到传递给参数的内容,例如@p_linq_19。我只看到一个参数占位符。

SELECT TOP (150) 
[Project1].[AlertIdentifier] AS [AlertIdentifier]
FROM ( SELECT 
 [Extent1].[AlertIdentifier] AS [AlertIdentifier], 
 [Extent1].[TimeReceived] AS [TimeReceived]
 FROM [dbo].[SecurityAlert] AS [Extent1]
 WHERE (2 <> [Extent1].[AlertStatusID]) AND ((convert(datetime2, '0001-01-01 00:00:00.0000000', 121) = @p__linq__0) OR ([Extent1].[DateScanned] >= @p__linq__1)) AND ((N'' = @p__linq__2) OR ([Extent1].[BettingShopIdentifier] LIKE @p__linq__3 ESCAPE N'~')) AND ((convert(datetime2, '0001-01-01 00:00:00.0000000', 121) = @p__linq__4) OR ([Extent1].[DateScanned] <= @p__linq__5)) AND ((cast(0 as float(53)) = @p__linq__6) OR ( CAST( [Extent1].[SlipStake] AS float) >= @p__linq__7)) AND ((@p__linq__8 < 1) OR ([Extent1].[SlipStatusID] = @p__linq__9)) AND ((cast(0 as float(53)) = @p__linq__10) OR ( CAST( [Extent1].[SlipPayoutActual] AS float) >= @p__linq__11) OR ( CAST( [Extent1].[SlipPayoutCalculated] AS float) >= @p__linq__12) OR ( CAST( [Extent1].[SlipPotentialReturn] AS float) >= @p__linq__13)) AND ((N'' = @p__linq__14) OR ([Extent1].[AlertSummary] LIKE @p__linq__15 ESCAPE N'~')) AND ((N'' = @p__linq__16) OR ([Extent1].[StaffScannedByUsername] LIKE @p__linq__17 ESCAPE N'~') OR ([Extent1].[StaffPayoutUsername] LIKE @p__linq__18 ESCAPE N'~') OR ([Extent1].[StaffEditedByUsername] LIKE @p__linq__19 ESCAPE N'~'))
)  AS [Project1]
ORDER BY [Project1].[TimeReceived] ASC

【问题讨论】:

  • 你是怎么得到这个结果的,你执行了什么查询?
  • @astaykov,登录 azure 门户,管理门户 - SQL 数据库 |查询性能 |选择特定查询。问题是我看不到传递给这些参数的内容。
  • 您确定没有看到正在传递的参数吗?看起来您看到的整个查询应该包含奇怪名称的参数,例如 @p__linq__0 左右。

标签: sql azure linq-to-entities azure-sql-database


【解决方案1】:

我会选择 miniprofiler 选项。你可以在这里下载它:http://miniprofiler.com/ 并配置它来分析你的 SQL 连接。

当然,您不会将其用于生产。您可以将其仅用于调试/暂存场景,也可以将分析器配置为仅在特定管理员用户登录时呈现。

【讨论】:

    【解决方案2】:

    虽然需要一些配置工作,但一种有效的方法是在实体框架级别设置跟踪。这样您就可以记录在应用程序级别执行的所有 SQL 语句。

    我建议使用Community Entity Framework Provider Wrappers,也可以使用NuGet package

    它来自 2011 年,但您可以在 this answerthis forum thread 中找到有关将其与更新版本的 Entity Framework 一起使用的说明。

    以前版本中有一个original blog post 解释了这个包装器的工作原理。

    另一种选择是使用MiniProfiler,作为suggested by amhed

    【讨论】:

      【解决方案3】:

      您可以在管理门户中检查查询性能。 Here is link how to do it.

      您还可以通过管理工作室连接到 Azure 数据库。 Here is a link how to do it. 在那里您可以检查查询计划并手动调用您的查询。

      【讨论】:

      • 你不能真正使用 SQL Azure 的 SQL Server Profiler。另外,您提供的所有内容都是基于history 的诊断,而不是像 SQL Server Profiler 那样基于real time monitoring 的诊断。而且您的链接根本不是you can connect to sql profiler。只是,如何诊断和调试 SQL Azure - 确实非常有价值,但不使用 SQL Server Profiler
      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 2019-01-22
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多