2014-09-03 57 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不是必須的,因爲它是一個被跟蹤的實體,它會知道當前狀態的任何變化。