[英]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轮它会抛出异常:
更新:
作为对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;
关于此有两点可疑的事情:
new new_job()
,要么将其设置为new_job_db
,但不能两者都设置。 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.