You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加多行数据时遇Id属性不可修改错误的技术求助

问题排查与解决

错误原因

你在foreach循环外部创建了TblCariAdres实例,第一次循环执行Db.TblCariAdres.Add(tblCariAdres)和Db.SaveChanges()后,EF上下文已经开始跟踪这个实体对象。第二次循环时,你试图修改这个已被跟踪实体的主键Id(主键属于对象的关键标识信息,EF不允许修改已跟踪实体的主键),因此触发了报错:The property 'Id' is part of the object's key information and cannot be modified.

修复方案

将TblCariAdres的实例创建逻辑移到foreach循环内部,每次循环都生成一个全新的实体对象,确保每次添加的都是未被EF跟踪的新实例:

if (tblCari.TblCariAdres.Count != 0) {
    foreach (var item in tblCari.TblCariAdres) {
        // 每次循环创建新的实体实例
        TblCariAdres tblCariAdres = new TblCariAdres();
        tblCariAdres.Id = Guid.NewGuid();
        tblCariAdres.FirmaId = tblCari1.FirmaId;
        tblCariAdres.CariId = tblCari1.Id;
        tblCariAdres.Tanim = item.Tanim;
        tblCariAdres.Isim = item.Isim;
        tblCariAdres.Adres = item.Adres;
        tblCariAdres.Ilce = item.Ilce;
        tblCariAdres.Sehir = item.Sehir;
        tblCariAdres.Telefon = item.Telefon;
        tblCariAdres.Aciklama = item.Aciklama;

        Db.TblCariAdres.Add(tblCariAdres);
    }
    // 所有实体添加完成后统一保存,减少数据库交互次数
    Db.SaveChanges();
}

额外优化

把Db.SaveChanges()移到循环外部,避免每次循环都执行一次数据库写入操作,能显著提升批量数据添加的性能。

内容的提问来源于stack exchange,提问作者Ünal Karaarslan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:55:11