繁体   English   中英

EF继续抛出错误System.InvalidOperationException ASP.NET MVC

[英]EF keep throwing error System.InvalidOperationException ASP.NET MVC

我需要通过for循环插入父记录,并且基于新生成的ID需要创建子记录,但是EF似乎运行不佳。

根据不同的stackoverflow问题中建议的答案,我在所有foreach循环之后都调用db.savechanges() ,但它只是创建两个记录,而foreach循环包含6个项目。

例外:

System.InvalidOperationException:'已成功提交对数据库的更改,但是在更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。 内部异常消息:违反了参照完整性约束:关系一端的'new_job.job_id'的属性值与另一端的'job_address_point.job_id'的属性值不匹配。

InvalidOperationException:发生了引用完整性约束冲突:关系一端的'new_job.job_id'的属性值与另一端的'job_address_point.job_id'的属性值不匹配。

码:

foreach (var cartype in cartypes)
{
    if (cartype.TotalCar != 0)
    {
        for (int i = 0; i < cartype.TotalCar; i++)
        {
            //new_job job = new new_job();
            //new_job_db object same as new_job where I'm assigning all values to properties 
            //received in parameter

            new_job job = new_job_db.CloneJson();

            job.job_ref = str + createRandomNumber();
            job.car_type_id = cartype.CarTypeId;
            db.new_job.Add(job);
            db.SaveChanges();
            var jobId = job.job_id;
            var jobDate = job.job_date;
            //multi address
            foreach (SelectedPoint p in _newjobdto.addresses)
            {
                job_address_point addr = new job_address_point();
                addr.job_id = jobId;
                addr.passenger_id = passengerId;
                addr.job_date = jobDate;
                addr.point_seq = Convert.ToInt32(p.PointSeq);
                addr.place_id = p.PlaceId;
                addr.formatted_address = p.FormattedAddress;
                addr.lat = p.Lat;
                addr.lng = p.Lng;
                addr.post_code = p.PostCode;
                addr.zone_name = p.ZoneName;
                addr.mile = p.Miles;
                addr.km = p.Kms;
                addr.charges = p.Charges;
                db.job_address_point.Add(addr);    
            }
            db.SaveChanges();
        }
    }
}

更新:

以下是调试结果:在第1轮它会生成ID,在第2轮它会抛出异常:

第一轮: 在此处输入图片说明

第二轮: 在此处输入图片说明

cartypes: 在此处输入图片说明

更新:

作为对Gabriel Luci答案的评论,我从该问题实现了CloneJson()扩展方法,但给出了相同的错误。 我要处理foreach循环外的20个属性,并将其复制到foreach循环内的新创建的对象中,这里仅需要设置两个属性。

第一:

new_job job = new new_job();
//new_job_db object same as new_job where I'm assigning all values to properties 
//received in parameter
job = new_job_db;

关于此有两点可疑的事情:

  1. 第二行覆盖第一行。 要么将其设置为new new_job() ,要么将其设置为new_job_db ,但不能两者都设置。
  2. 什么是new_job_db 如果记录已经保存到数据库中,则可能是导致异常的原因,但是我不能不说如何声明而说。

下一个:

db.Entry(job).State = System.Data.Entity.EntityState.Added;
db.new_job.Add(job);

不要设置State 不用了 将其添加到db.new_job集合将为您完成此操作。 这也可能是导致异常的原因。

暂无
暂无

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

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