簡體   English   中英

實體框架在循環中執行存儲過程

[英]Entity Framework execute stored procedure in a loop

我試圖遍歷列表並在列表中的每個項目上執行存儲過程。

foreach(value in values) {
    Context.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()));
}

我一直收到以下錯誤:

不允許新事務,因為會話中正在運行其他線程。

我也嘗試使用異步方法。 但這似乎不起作用。 有什么我想念的東西。 或者是否無法在循環內運行存儲過程?

也許db填充values調用已經打開了一個事務,阻止了內部調用的運行。

嘗試在填充values的調用中使用.ToList()以首先預加載所有值。

為每次執行創建新的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()));
                }
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM