【问题标题】:Batch saving ef 6 records in a for loop在 for 循环中批量保存 ef 6 条记录
【发布时间】:2014-12-17 20:13:14
【问题描述】:

有没有人知道或解释为什么在使用 EF6 时以下代码会引发下面提到的以下错误?我间歇性地收到这些错误。另外,请建议发生错误时如何保存记录。

using (var context = GetNewDBEntities())
{
   for (var i = 0; i < Docs.Count; i++)
   {
      context.Docs.Add(Docs[i]);

      //Save 50 Records per batch
      if (i % 50 == 0)
          context.SaveChanges();
   }
  context.SaveChanges();
}

EF 6 断开上述代码的连接并出现以下错误。

  1. 更新条目时出错。
  2. 由于批处理被中止,请求无法运行,这可能是由于客户端发送的中止信号,或者同一会话中正在运行另一个请求,导致会话繁忙。当前命令发生严重错误。结果,如果有的话,应该丢弃。
  3. 未能建立 MARS 会话以准备将请求发送到服务器。 (提供者:SMux Provider,错误:19 - 物理连接不可用)

【问题讨论】:

  • 这批工作完美。它间歇性地抛出上述错误并且不写入数据库。问题更具体地针对导致这些错误的错误。
  • 好的,连接字符串中似乎不应该有“多个活动结果集=true”。发生此错误时,我不会尝试继续。上下文可能处于不一致的状态。您能否展示一些Doc 对象的详细信息?
  • 它只是一个被EF渲染为类对象的表,所以当它无法创建新的会话时,它会回滚所有的会话吗?发生此错误时,您究竟是什么意思继续?那么为何不?它间歇性地发生。
  • 查看错误3:error: 19 - Physical connection is not usable。似乎数据库不是开发机器的本地数据库。我会首先制作数据库的本地副本并尝试在那里进行,在我看来,网络连接存在问题。
  • 对不起,应该提到这个错误来自生产,并且数据库不存在于同一台机器上。

标签: c# entity-framework entity-framework-6.1


【解决方案1】:

我将 SqlAzureExecutionStrategy 包含到 EF6.1 中,并且错误消失了,现在至少 2 周没有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多