繁体   English   中英

为什么实体框架允许我在循环的第一次迭代中插入带有标识主键的表,但之后失败?

[英]Why does Entity Framework allow me to insert into a table with an identity primary key on the first iteration of a loop but fails after?

我正在使用以下代码将记录插入表中:

        foreach (string tag in splitTags)
        {
            objTag.Tag = tag;
            objTag.ReportId = objReport.ReportId;
            objTag.TagId = 0;
            context.Tags.Add(objTag);
            context.SaveChanges();
        }

该表有一个主键TagID ,它是一个标识列。

它在循环的第一次迭代中按预期工作,但在任何其他尝试中失败并给出错误:

当 IDENTITY_INSERT 设置为 OFF 时,无法为表“Tags”中的标识列插入显式值”

我想知道为什么会发生这种情况,即使在发生任何上下文添加或保存更改之前将 TagID 设置为 0, ReportID每次也相同,唯一的区别是 Tag 文本。

谢谢

您的循环中没有对象创建 您一次又一次地插入相同的对象。

实际上,您更改了现有对象的主键,这是不允许的。

所以在每个循环中创建一个新对象!

通常,应首选此类循环后的 SaveChanges。

除了@Holger 的回答之外,您还可以像这样去掉foreach

var tags = splitTags.Select(s => new Tag { Tag = s, ReportId = reportId });
context.Tags.AddRange(tags);
context.SaveChanges();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM