我有一个复杂的类,当我在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)
查看文件包含此
@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();
}
答案 0 :(得分:0)
这是因为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();
}