Мне нужно вставить родительскую запись в цикл for и на основе вновь сгенерированного идентификатора нужно создать дочерние записи, но EF, похоже, не работает должным образом.
На основании ответов, предложенных в разных вопросах stackoverflow,Я называю db.savechanges()
после всего цикла foreach
, но он просто создает две записи, тогда как цикл 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-м раунде бросаетисключение:
1-й раунд: ![enter image description here](https://i.stack.imgur.com/KjADm.png)
2-й раунд: ![enter image description here](https://i.stack.imgur.com/M6YXT.png)
типы карт: ![enter image description here](https://i.stack.imgur.com/l0S3X.png)
Обновление:
В качестве комментария к ответу Габриэля Люси я реализовал метод расширения CloneJson () из этого вопроса , но он выдает ту же ошибку.Я хочу взять обработку 20 свойств вне цикла foreach и скопировать его во вновь создаваемый объект внутри цикла foreach, где нужно установить только два свойства.