我有一个用于存档某些表的存储过程。它运行约30分钟(首次运行,移动2000多万条记录)。如果我从管理工作室启动脚本,我可以运行其他查询和任何包括正在运行的归档表格的任何内容。
但是,如果我从代码(C#,EF)运行脚本,我无法从服务器获得任何结果,甚至不能从管理工作室获得。 我认为(希望)这必须是一些连接字符串调整,但不知道我在寻找什么。 mmstudio和ef ExecuteSqlCommand有什么区别?
运行存储过程的c#代码:
SqlParameter daysparam = new SqlParameter("@Day", days);
using (ReportsContext rcx = new ReportsContext())
{
rcx.Database.CommandTimeout = 60 * 40;
rcx.Database.ExecuteSqlCommand("Archive @Day", daysparam);
}
连接字符串:
connectionString="data source=localhost\SQLSERVER2014;initial catalog=****_dev;persist security info=True;user id=sa;password=***;MultipleActiveResultSets=True;App=EntityFramework"
答案 0 :(得分:2)
解决方案是添加TransactionalBehavior.DoNotEnsureTransaction作为ExecuteSqlCommand的第一个参数:
rcx.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, "Archive @Day", daysparam);