2012-07-12 55 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();