首页 > 解决方案 > 无法将多个条目插入特定表

问题描述

我在 Entity Framework Core 2.2 中的 API 存在以下问题:我正在尝试将 3 条记录(详细信息)保存到一个表中,并且它只存储其中一个。我已经多次执行相同的过程并且效果很好,但是在此表中它只保存了 1 条记录。我的代码是这样的:

foreach (var i in details)
{
    var regDet = new table
        {
            campo1 = i.value1,
            campo2 = i.value2
        };

    dbcontext.table.Add(regDet);
}

await dbcontext.SaveChangesAsync();

标签: c#entity-framework-core

解决方案


您发出的很可能是由于regDet在循环中重用变量引起的foreach

编译器实际上会修改您的 foreach 以使其功能与您预期的略有不同。最终你的循环会表现得像这样写:

Table regDet;
foreach (var i in details)
{
    regDet = new table
        {
            campo1 = i.value1,
            campo2 = i.value2
        };

    dbcontext.table.Add(regDet);
}

await dbcontext.SaveChangesAsync();

以这种方式编写循环有助于强调问题。我们regDet在调用之前用新值覆盖变量dbcontext.SaveChangesAsync();

考虑到这一点,有两种方法可以解决这个问题。

  1. 省略变量。

foreach (var i in details)
{
    dbcontext.table.Add(new table
        {
            campo1 = i.value1,
            campo2 = i.value2
        });
}

await dbcontext.SaveChangesAsync();
  1. 进入dbcontext.SaveChangesAsync();循环foreach
foreach (var i in details)
{
    var regDet = new table
        {
            campo1 = i.value1,
            campo2 = i.value2
        };

    dbcontext.table.Add(regDet);
    await dbcontext.SaveChangesAsync();
}


推荐阅读