2

我在尝试使用 Entity Framework 删除对象时遇到问题,我之前查询上下文以获取我需要删除的对象列表,然后一一调用 deleteobject

IQueryable result = context.CustomObjects.Where(t=>t.Property = something)

foreach (CustomObject customObj in result)
{
      context.DeleteObject(customObj);
}

当我调用 DeleteObject 时,EF 执行一个奇怪的查询,如下所示:

exec sp_executesql N'SELECT 
[Extent1].[Value1] AS [Value1], 
[Extent1].[Value2] AS [Value2], 
[Extent1].[Value3] AS [Value3], 
FROM [CustomObject] AS [Extent1]
WHERE [Extent1].[ID] = @EntityKeyValue1',N'@EntityKeyValue1 int',@EntityKeyValue1=59

此查询似乎搜索 ID = something 的所有对象,但 ID 它只是实体键的一部分,确实由 3 个字段组成,因此它像 n 千个项目一样附加并且使过程非常缓慢,这是我的一种行为无法理解,我总是这样删除对象,我从来没有遇到过这样的问题

有人可以有一个想法吗?

谢谢

4

1 回答 1

0

您可能正在获取由 where 查询定义的多个对象。此外,对于您获取的每个对象,您将获取对象 CustomObject 上的所有字段。

正在执行的查询是一个选择查询,因此这证实了上述行为。

如果您想要更好的性能,那么我建议您执行以下操作:

var entityToDelete = new SomeEntity();
SomeEntity.PK = 12;
var context = new YourContextntities();
context.YourEntitites.Attach(entityToDelete);
context.YourEntitites.Remove(entityToDelete);
context.SaveChanges();
于 2012-08-10T14:59:33.390 回答