从 STE 中删除集合元素的正确方法是什么?目前我使用以下代码:
order.Items[i].MarkAsDeleted();
order.Items.RemoveAt(i);
看起来它有效(尽管我已将实体从集合中删除,但 ApplyChanges 仍将其删除)。但它看起来有点难看。我做得对吗?或者可能有其他方法?
从 STE 中删除集合元素的正确方法是什么?目前我使用以下代码:
order.Items[i].MarkAsDeleted();
order.Items.RemoveAt(i);
看起来它有效(尽管我已将实体从集合中删除,但 ApplyChanges 仍将其删除)。但它看起来有点难看。我做得对吗?或者可能有其他方法?
此文本直接取自MSDN:
MarkAsDeleted 方法将实体的状态更改为已删除。此方法还清除被标记为删除的实体上的导航属性。如果导航属性指向引用对象,则将其设置为 null。如果导航属性表示一个集合,则调用 Clear 方法。当对属于集合的对象调用 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
集合中删除,因此删除索引处的项目很可能会删除与另一个项目的中断关系。