实体框架DeleteObject查询了很多项目

时间:2012-07-12 13:26:50

标签: entity-framework linq-to-entities

我在尝试使用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个字段组成,因此它附加了数千个项目并使进程非常慢,即我无法理解的行为,我总是以这种方式删除对象,我从未遇到过这样的问题

有人有想法吗?

由于

1 个答案:

答案 0 :(得分:0)

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

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

如果你想要更好的表现,那么我建议你做这样的事情:

var entityToDelete = new SomeEntity();
SomeEntity.PK = 12;
var context = new YourContextntities();
context.YourEntitites.Attach(entityToDelete);
context.YourEntitites.Remove(entityToDelete);
context.SaveChanges();