Gereltuya Ответов: 1

Удаление существующих строк Entity framework не работает. Он отправляет обратно ошибку проверки сущности


Обновление/редактирование работает отлично, но когда я удаляю одну из строк в модели, чтобы отправить ее обратно в БД, она продолжает читать ошибку "ошибка проверки сущности". Почему это так?


public void UpdateReportGroup(TReportHeaderModel model)
       {


           if (model.THeaderTitle == null)
           {
               throw new Exception("Report Group Title must be filled in");
           }
           if (model.THeaderTitle.Length <= 0)
           {
               throw new Exception("A Report Group Title must be filled in.");
           }

           using (var connection = new TReportEntitiesConnection())
           {

               var existingParent = connection.THeaders
                    .Include("TReports")
                    .Where(p => p.ID == model.ID)
                    .SingleOrDefault();

               if (existingParent != null)
               { //update parent report group
                   connection.Entry(existingParent).CurrentValues.SetValues(model);

                   //delete children reports
                   foreach (var existingChild in existingParent.TReports.ToList())
                   {

                       if (!model.TReports.Any(c => c.ID == existingChild.ID))
                       {
                           connection.TReport.Remove(existingChild);
                       }

                   }


                   foreach (var childModel in model.TReports)
                   {
                       var existingChilds = existingParent.TReports
                           .Where(c => c.ID == childModel.ID)
                           .SingleOrDefault();


                       //update existing childreports
                       if (existingChilds != null)
                       {
                           //connection.Entry(existingChild).CurrentValues.SetValues(childModel);
                           existingChilds.TReportName = childModel.name;
                           existingChilds.URL = childModel.url;
                           connection.Entry(existingChilds).State = System.Data.Entity.EntityState.Modified;
                       }
                       else
                       {
                           var newChild = new TReport
                           {
                               URL = childModel.url,
                               TReportName = childModel.name,
                           };
                           existingParent.TReports.Add(newChild);
                       }
                   }

               }
                   connection.SaveChanges();

           }
       }


Что я уже пробовал:

Первая попытка: не получилось
foreach (var existingChild in existingParent.TReports.ToList())
                   {

                       if (!model.TReports.Any(c => c.ID == existingChild.ID))
                       {
                           connection.TReport.Remove(existingChild);
                       }

                   }


Вторая попытка: не получилось
connection.TReport.RemoveRange(existingParent.TReports.ToArray());



Когда я отлаживал его, он отправлял два объекта модели как null. Почему это так?

1 Ответов

Рейтинг:
9

Gereltuya

Разгадал ее! Я передавал неверный параметр с моей точки зрения.