text. database . sqlquery与SQL在管理工作室

本文关键字:SQL 管理 管理工作 工作室 sqlquery database double text | 更新日期: 2023-09-27 18:16:36

我有一个脚本,我从EF 6.1上下文运行:

using (var context = new Entities())
{
    context.Database.CommandTimeout = 120;
    var result  = context.Database.SqlQuery<double?>(
        sqlCommandString,
        new SqlParameter("since", since),
        new SqlParameter("until", until),
        new SqlParameter("p", p)
        ).FirstOrDefault();
}

我注意到,如果我在Management Studio中使用完全相同的参数运行脚本,它的执行时间为40毫秒,而使用上面的代码在控制台应用程序中运行它,它会抛出超时异常。

连接字符串是正确的,其他脚本运行良好(较慢,但至少他们返回)。

我错过了什么?是否有另一种使用EF执行标量命令而不实际映射存储过程的方法?

text. database . sqlquery<double?>与SQL在管理工作室

直接从代码执行SQL时,检查脚本中的制表符和空格。

如果代码是多行并且保持缩进,则所有制表符和空格都将随命令一起发送。运行EF中的代码将它包装在sp_executesql中,所有的制表符和空格都变得一团糟。

:

if(true)
{
    if(true)
    {
        string sqlCommand = @"
            SELECT * FROM (
                SELECT * FROM tblA
            ) A
        ";
    }
}

:

if(true)
{
    if(true)
    {
        string sqlCommand = 
@"
SELECT * FROM (
    SELECT * FROM tblA
) A
";
    }
}