【发布时间】:2012-03-29 17:51:55
【问题描述】:
我有一个名为 Entry 的实体连接到多个 TimeWindows。我想清除所有时间窗口,然后添加新的。一开始我试过:
target.TimeWindows.Clear();
但这并没有真正删除它们,只是试图删除关系,这导致异常,因为从 TimeWindows 到 Entry 存在外键。然后我想我应该这样做:
foreach (var tw in target.TimeWindows)
context.DeleteObject(tw);
但这也会引发异常,因为集合是在 foreach 语句中修改的。于是我想到了这个:
while (target.TimeWindows.Count > 0)
context.DeleteObject(target.TimeWindows.Last());
但现在我有点担心使用Count 属性,因为它可能会导致执行SQL SELECT COUNT 语句。可以?如果是,如何删除 Entity Framework 中的所有时间窗口?
【问题讨论】:
-
不,
Count不会在数据库上触发SELECT COUNT,更糟糕的是:-)。它将执行SELECT * FROM TimeWindows WHERE TargetId = @P0并对内存中的集合进行计数。 -
天哪!那你有什么建议?!
-
当你想删除一个实体时,应该首先将它加载到内存中。所有的 O/RM 工具都以这种方式工作。实体框架也不例外。如果性能太低,请编写一个执行删除的存储过程。
标签: entity-framework