0

从 STE 中删除集合元素的正确方法是什么?目前我使用以下代码:

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

看起来它有效(尽管我已将实体从集合中删除,但 ApplyChanges 仍将其删除)。但它看起来有点难看。我做得对吗?或者可能有其他方法?

4

1 回答 1

1

此文本直接取自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集合中删除,因此删除索引处的项目很可能会删除与另一个项目的中断关系。

于 2011-06-23T07:33:26.957 回答