我需要通过for循环插入父记录,并且基于新生成的id需要创建子记录,但是ef似乎没有很好地工作。
根据不同stackoverflow问题的答案,我调用
db.savechanges()
毕竟
foreach
循环但它只是创建两个记录
前额
循环包含6项。
例外:
system.invalidooperationexception:'已成功提交对数据库的更改,但更新对象上下文时出错。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();
}
}
}
更新:
以下是调试结果:
在第一轮,它生成id
在第二回合,它抛出了一个例外:
第一轮:
第二轮:
cartypes:
更新:
作为gabriel luci answer的注释,我从这里实现了clonejson()扩展方法
question
但也有同样的错误。我想处理foreach循环外的20个属性,并将其复制到foreach循环内的新create对象中,其中只需要设置两个属性。