Gereltuya Ответов: 1

Обновление существующих строк не работает с помощью "set values" при использовании entityframework.


Почему setvalues не работает для меня? Разве это не работает для объектов модели?


using (var connection = new TReportEntitiesConnection())
        {

            var header = connection.THeaders.Include("TReports").SingleOrDefault(f => f.ID == model.ID);

            if (header != null)
            {
                header.THeaderTitle = model.THeaderTitle; //update parent
            }
            foreach (var existingChild in header.TReports.ToList())
            {

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

            }
            foreach (var url in model.TReports)
            {
                var existingChild = header.TReports
                    .Where(c => c.ID == url.ID)
                    .SingleOrDefault();


                if (existingChild!= null)
                { //update child
                    connection.Entry(existingChild).CurrentValues.SetValues(url);
                }
                else
                {
                    var newChild = new TReport
                    {
                        TReportName = url.name,
                        URL = url.url,
                    };

                    header.TReports.Add(newChild);
                }
            }
            connection.SaveChanges();
        }


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

Я попытался изменить его, но потом понял, что он продолжает добавлять новые строки.
header.TReports.Add(new TReport()
                       {
                           TReportName=url.name,
                           URL=url.url

                       });

1 Ответов

Рейтинг:
2

Dave Kreskowiak

Как насчет того, чтобы сделать это проще? Не используйте SetValues, вместо этого просто установите значение свойства, которое вы хотите изменить.

existingChild.property = value;
connection.Entrry(existingChild).State = EntityState.Modified;