实体框架在循环中执行存储过程

时间:2017-12-13 05:17:08

标签: c# sql-server entity-framework

我正在尝试遍历列表并对列表中的每个项执行存储过程。

Home

我一直收到以下错误:

  

不允许使用新事务,因为会话中还有其他线程在运行。

我也尝试使用异步方法。但这似乎不起作用。有什么我想念的东西。或者是否无法在循环内运行存储过程?

2 个答案:

答案 0 :(得分:2)

对填充values的db调用可能已经打开了一个事务,阻止了内部调用的运行。

尝试在填充.ToList()的调用中使用values来预先加载所有值。

答案 1 :(得分:0)

为每次执行创建新的Context实例可能会更好;

            foreach (value in values)
            {
                using (var yourContext = new YourDbContext())
                {
                    yourContext.Database
                        .ExecuteSqlCommand(
                            "sp_ProcedureName @value1, @value2, @value3",
                            new SqlParameter("@value1", value.value1.ToString()),
                            new SqlParameter("@value2", value.value2.ToString()),
                            new SqlParameter("@value3", value.value3.ToString()));
                }
            }