Эффективный способ удаления нескольких строк с 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();