下面是我想要做的一个非常基本的例子。。。即循环浏览收藏等
我使用的是Telerik MVC网格,它发布了一个已删除、插入和更新的ViewModel集合。视图模型与实体相似,但并不完全相同。
例如。。。我有:
Order.Lines.Lines是一个包含OrderDetail记录的实体集合(导航属性)。在我的控制器的更新操作中,使用从POST数据中提取的I have a List names DeletedLines。我还查询了数据库,并获得了包含Lines集合的Order实体。
现在,我基本上想告诉它删除Lines EntityCollection中的所有OrderDetails。
我做这件事的方式有点像:
foreach (var line in DeletedLines) {
db.DeleteObject(Order.Lines.Where(l => l.Key == line.Key).SingleOrDefault())
}
我希望有一种方法可以使用.Interset()来获得一个要删除的实体集合,并将其传递给DeleteObject。。然而,DeleteObject似乎只接受单个实体,而不接受集合。
也许以上已经足够了。。但似乎应该有一个更简单的方法。
谢谢,BOb
DeletedLines中的项是否附加到上下文?如果是,这个怎么办?
foreach (var line in DeletedLines) db.DeleteObject(line);
对评论#1的回应
好的,我明白了。你可以让你的代码短一点,但不多:
foreach (var line in DeletedLines) {
db.DeleteObject(Order.Lines.SingleOrDefault(l => l.Key == line.Key))
}
我不确定当您将DeleteObject传递为null时,它是否会引发异常。如果是这样,你可能会更好地使用Single,只要你确定物品在那里:
foreach (var line in DeletedLines) {
db.DeleteObject(Order.Lines.Single(l => l.Key == line.Key))
}
如果你不想重新查询数据库,并且已经有了映射表PK值(或者可以在客户端调用中包括它们),你可以使用Alex James的一个技巧来删除而不首先检索:
http://blogs.msdn.com/b/alexj/archive/2009/03/27/tip-9-deleting-an-object-without-retrieving-it.aspx