Bulk-Операции в Entity Framework 7
В EF наконец завезут Bulk-Update и Bulk-Delete. Добавленные методы улучшают производительность. Теперь мы можем делать обновления и удаления с помощью всего одной операции, результатом которой будет одна команда SQL.
Рассмотрим использование этих операций. Допустим, у нас есть класс людей:
public class PersonExecuteDelete
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Чтобы массово удалить набор сущностей, отфильтруем их с помощью
Where (как раньше), а затем вызовем ExecuteDelete. Помимо прочего, метод возвращает количество удалённых записей:var personsDeleted = context.PersonsВот какой код SQL он сгенерирует:
.Where(p => p.Name.Contains("L"))
.ExecuteDelete();
DELETE FROM [p]Как видите, он просто генерирует одну инструкцию SQL для удаления сущностей, соответствующих условию.
FROM [Persons] AS [p]
WHERE [p].[Name] LIKE N'%L%'
ExecuteUpdate
Для обновления сущностей нам нужно использовать новый метод SetProperty. Первый аргумент SetProperty выбирает свойство, которое необходимо обновить с помощью лямбда-выражения, а второй аргумент — это новое значение этого свойства также с помощью лямбда-выражения, в котором мы также можем получать доступ к свойству. Например, здесь мы добавим префикс "New" к имени первой тысячи людей:
var personsUpdated =В результате возвращается количество обновлённых записей, а SQL код получается таким:
context.Persons
.Where(p => p.PersonId <= 1_000)
.ExecuteUpdate(
p => p.SetProperty(
x => x.Name,
x => "New" + x.Name)
);
}
UPDATE [p]Чтобы обновить несколько свойств за раз, просто вызовите методы
SET [p].[Name] = N'New' + [p].[Name]
FROM [Persons] AS [p]
WHERE [p].[Id] <= CAST(1000 AS bigint)
SetProperty в цепочке:….ExecuteUpdate(p =>Источник: https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate
p.SetProperty(x => x.Name, x => "…")
.SetProperty(x => x.Age, x => 42)
);
}