我必须在我的项目中使用对象,每个对象都代表 db 中的一个表。一个名字是“form”,另一个是“forminput”,一个form对象有很多forminput对象。

下面是我的代码:

form form = db.forms.find(id);
form.name = "new name";
form.forminputs.clear();
foreach( forminput input in inputs)
{
  form.forminputs.add(input);
}
db.Entry(form).state = EntityState.Modified;
db.SaveChanges();

我想要的是删除所有子表单输入对象,并创建一堆新的表单输入对象,并在一次调用 SaveChanges 方法中保存在数据库中。

但是系统告诉我不能修改关系,因为一个或多个键不能为空。

谁能帮我 ?谢谢。

最佳答案

您还需要删除每个对象,而不仅仅是关系。

foreach (var input in form.forminputs.ToArray())
{
    db.Entry(input).State = EntityState.Deleted;
}
// form.forminputs.Clear();

或者
form.Set<forminput>().RemoveRange(form.forminputs);
// form.forminputs.Clear();

PS

不需要 Clear,因为标记为 DeletedRemoveRange 将从集合中删除每个对象。

并且不需要将表单标记为 Modified,因为它是一个被跟踪的实体,它会知道当前状态的任何变化。

关于c# - 如何通过ef删除asp.net中的子记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25644279/

10-13 06:48