Как обновить детей с родителями в Entity Framework - PullRequest
0 голосов
/ 27 января 2019

У меня есть сложный класс, и когда я обновляю данные в View и сохраняю их в базу данных, Entity сохраняет их дважды в дочерние данные класса.

public class Parent
{
    public int ID { get; set; }
    public string Name { get; set; }
    public List<Children> Children { get; set; }
}

public class Children
{
    public int ID { get; set; }
    public string Name { get; set; }
}

 var v = context.Parent.Include(c=>c.Children);
 return View(v)

Файл View включает в себя

@model Parent
<input asp-for=Parent.Name >
for(int i; i<Model.Child.Count();i++)
{
    <input asp-for=Parent.Child[1].Name />
}

Я очень упростил классы .. если изменить имя родителя и детей в браузере (Просмотр), он обновляет имя родителя, но вставляет новое имя для детей, а не обновляет имя детей.Каждый раз, когда я меняю имя ребенка, он добавляет новых детей в базу данных.

public void Save(Parent parent)
{
   if (Parent.ID== 0)
   {
       context.Parent.Add(parent);
   }
   else
   {
       Paret dbEntry = context.Parent.FirstOrDefault(a => a.ID== parentID);
       if (dbEntry != null)
       {
                dbEntry.ID= parent.ID;
                dbEntry.Name= parent.NAme;
                dbEntry.Children = parent.Children;
        }
     }

     context.SaveChanges();
}

1 Ответ

0 голосов
/ 28 января 2019

Это потому, что строка dbEntry.Children = parent.Children; добавляет детей как новых детей, а не обновляет существующих детей.

Эту проблему можно решить следующим образом:

public void Save(Parent parent)
{ 
    if (Parent.ID== 0)
    {
       context.Parent.Add(parent);
    }
    else
    {
       Parent dbEntry = context.Parent.Inlcude(p => p.Children).FirstOrDefault(a => a.ID== parentID);

       if (dbEntry != null)
       {
            dbEntry.ID= parent.ID;
            dbEntry.Name= parent.NAme;

            dbEntry.Children.Clear() // It will clear the children before adding the updated version of the children.

            dbEntry.Children = parent.Children;
        }
    }
    context.SaveChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...