Эффективный способ удаления нескольких строк с Linq в Entity?

Привет, я ищу эффективный способ удаления нескольких записей одновременно. Я удаляю 400 записей и занимает 8-15 секунд. Вот мой код

using (var entities = new Entity())
   {                               
       foreach (Item item in entities.Items.Where(x => x.id == id))
              entities.DeleteObject(item);
       entities.SaveChanges();
   }

Ответ 1

Вы можете сделать это быстрее, используя EntityFramework.Extensions
1) Сначала установите EntityFramework.Extensions с помощью NuGet

2) Вот код, похожий на Linq2Sql DeleteAllOnSubmit():

using EntityFramework.Extensions;

....

using (var entities = new Entity())
{                               
    entities.Items.Delete(x => x.id == id);
    entities.SaveChanges();
}

...

Ответ 2

Отметьте Массовое удаление в LINQ to Entities или PLINQO для Entity Framework если это вид удаления, который вы могли бы сделать в одной партии, то есть

DELETE FROM Entities WHERE [some condition]

В противном случае, возможно, у вас есть индекс в столбце x, который вы используете, чтобы найти каждую запись.

Ответ 3

В вашей петле:

using (var entities = new Entity()) 
{                                
    foreach (Item item in entities.Items.Where(x => x.id == id)) 
           entities.DeleteObject(item); 
    entities.SaveChanges(); 
} 

Если вы перемещаете объекты .SaveChanges(); так что он будет работать после цикла, он будет работать значительно быстрее.

using (var entities = new Entity()) 
{                                
    foreach (Item item in entities.Items.Where(x => x.id == id)) 
          entities.DeleteObject(item); 
} 
entities.SaveChanges();