2011-06-23 123 views
0

什麼是從STE中刪除收集元素的正確方法。目前我使用下面的代碼:自我跟蹤實體移除子實體

order.Items[i].MarkAsDeleted(); 
order.Items.RemoveAt(i); 

看起來像它的工作原理(和ApplyChanges儘管我已經從集合中刪除它刪除實體)。但它看起來有點難看。我確實是嗎?或者可能有其他方法?

回答

1

本文直接取自MSDN

的MarkAsDeleted方法改變了實體到已刪除的 狀態。此 方法還會清除標記爲刪除的 實體上的導航 屬性。導航 屬性設置爲空,如果它是指向參考對象的 。如果 導航屬性表示 集合,則會調用 清除方法。當MarkAsDeleted被 集合中的一個對象調用時,對象將從 集合中刪除。要將 中的每個對象標記爲已刪除的集合,請在該集​​合的副本中標記 對象。 獲取集合, 調用ToArray的()或ToList()方法 副本的集合,如下面的 例如:

List<Course> courses = department.Courses.ToList(); 
foreach (var c in courses) 
{ 
    // Mark each course in the department as Deleted. 
    c.MarkAsDeleted(); 
} 

那麼,你是不是做錯了,因爲一旦您將項目標記爲已刪除,它應該已經從Items集合中刪除,因此刪除索引處的項目很可能會刪除與另一個項目的中斷關係。