C# context.Database.SqlQuery中的标量命令<;双倍?>;在ManagementStudio中VSSQL
我有一个从EF 6.1上下文运行的脚本:C# context.Database.SqlQuery中的标量命令<;双倍?>;在ManagementStudio中VSSQL,c#,sql,entity-framework,C#,Sql,Entity Framework,我有一个从EF 6.1上下文运行的脚本: using (var context = new Entities()) { context.Database.CommandTimeout = 120; var result = context.Database.SqlQuery<double?>( sqlCommandString, new SqlParameter("since", since), new SqlPara
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();
}
使用(var context=new Entities())
{
context.Database.CommandTimeout=120;
var result=context.Database.SqlQuery(
sqlCommandString,
新的SqlParameter(“自”,自),
新的SqlParameter(“直到”,直到),
新的SqlParameter(“p”,p)
).FirstOrDefault();
}
我注意到,如果在ManagementStudio中使用完全相同的参数运行脚本,它的执行时间为40毫秒,而在控制台应用程序中使用上述代码运行脚本,则会引发超时异常
连接字符串正确,其他脚本运行正常(速度较慢,但至少返回)
我错过了什么?是否有其他方法可以使用EF执行标量命令而不实际映射存储过程?直接从代码执行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
";
}
}
好:
if(true)
{
if(true)
{
string sqlCommand = @"
SELECT * FROM (
SELECT * FROM tblA
) A
";
}
}
if(true)
{
if(true)
{
string sqlCommand =
@"
SELECT * FROM (
SELECT * FROM tblA
) A
";
}
}