我必须在我的项目中使用对象,每个对象代表db中的一个表。一个名字是"形式"另一个是" forminput",一个表单对象有许多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();
我想要的是删除所有子forminput对象,并创建一堆新的forminput对象,并在一个调用SaveChanges方法中保存在db中。
但是系统告诉我不能修改关系,因为一个或多个键不能为空。
谁能帮帮我?感谢。
答案 0 :(得分:2)
您还需要删除每个对象,而不仅仅是关系。
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
,因为标记为Deleted
或RemoveRange
将从集合中删除每个对象。
将表单标记为Modified
不是必需的,因为它是一个被跟踪的实体,它将知道当前状态的任何变化。