2

Entity Framework でオブジェクトを削除しようとすると問題が発生します。以前にコンテキストをクエリして、削除する必要があるオブジェクトのリストを取得してから、1 つずつ 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 千のアイテムのようにアタッチされ、プロセスが非常に遅くなります。これは動作です。理解できません。私はいつもこの方法でオブジェクトを削除しましたが、そのような問題は一度もありませんでした

誰かがアイデアを持つことができますか?

ありがとう

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 に答える