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