我有一个从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执行标量命令而不实际映射存储过程的方法?
答案 0 :(得分:0)
直接从代码执行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
";
}
}