2012-07-12 41 views
2

我有一个问题想删除与实体框架的对象,我以前查询上下文来获取对象的列表我需要删除,然后再一个一个我调用DeleteObject实体框架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 =东西的对象,但ID它只是为实体键的一部分的确由3个字段组成,因此它附着了n千个项目和m个这个过程非常缓慢,这是我无法理解的行为,我总是以这种方式删除对象,我从来没有这样的问题

有人可以有一个想法吗?

谢谢

回答

0

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

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

如果你想更好的性能,那么我建议你做这样的事情:

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