2014-09-03 35 views
4

我必须在我的项目中的对象,每个代表一个表中的数据库。一个名称是“form”,另一个名称是“forminput”,一个表单对象有许多forminput对象。下面如何删除asp.net中的儿童记录通过ef

是我的代码:

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方法。

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

谁能帮帮我?谢谢。

回答

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是不需要的,如作为DeletedRemoveRange标记将要从集合中移除的每个对象。

将表格标记为Modified不是必须的,因为它是一个被跟踪的实体,它会知道当前状态的任何变化。