我有两个独立的数据库,我使用linq和EF6连接。我还运行了一些存储过程。出于速度原因,我使用旧学校的方式运行这些方法:
public static DataSet ExecuteStoredProcedure(object db, string storedProcedureName, IEnumerable<SqlParameter> parameters)
{
string connectionString="";
if (db is AriaEntities)
{
connectionString = ((AriaEntities)db).Database.Connection.ConnectionString;
}
else if (db is AMSEntities)
{
connectionString = ((AMSEntities)db).Database.Connection.ConnectionString;
}
var ds = new DataSet();
using (var conn = new SqlConnection(connectionString))
{
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = storedProcedureName;
cmd.CommandType = CommandType.StoredProcedure;
foreach (var parameter in parameters)
{
cmd.Parameters.Add(parameter);
}
using (var adapter = new SqlDataAdapter(cmd))
{
adapter.Fill(ds);
}
}
conn.Close();
}
return ds;
}
我正在传递我正在使用的数据库连接。
我遇到的问题是,当我尝试在AMSEntities数据库上下文中运行存储过程时,我得到一个超时,即使在SQL Server中手动运行该过程本身只需要一秒钟就可以运行。我对存储过程有执行权限,我可以使用linq访问datacontext中的表。
为什么会发生超时消息?
罗布
答案 0 :(得分:1)
尝试添加conn.Open();
DbContext仅在SubmitChanges或枚举查询时打开连接。
答案 1 :(得分:0)
如上面的注释所示,结果是存储过程中导致查询执行缓慢的链接服务器的隐藏引用。幸运的是,我可以删除它,因为它原来是不再需要的遗留代码。