TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #1632 1.61K
День 1315. #ЧтоНовенького
Bulk-Операции в Entity Framework 7
В EF наконец завезут Bulk-Update и Bulk-Delete. Добавленные методы улучшают производительность. Теперь мы можем делать обновления и удаления с помощью всего одной операции, результатом которой будет одна команда SQL.

Рассмотрим использование этих операций. Допустим, у нас есть класс людей:
public class Person
{
public long Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}

ExecuteDelete
Чтобы массово удалить набор сущностей, отфильтруем их с помощью Where (как раньше), а затем вызовем ExecuteDelete. Помимо прочего, метод возвращает количество удалённых записей:
var personsDeleted = context.Persons
.Where(p => p.Name.Contains("L"))
.ExecuteDelete();

Вот какой код SQL он сгенерирует:
DELETE FROM [p]
FROM [Persons] AS [p]
WHERE [p].[Name] LIKE N'%L%'
Как видите, он просто генерирует одну инструкцию SQL для удаления сущностей, соответствующих условию.

ExecuteUpdate
Для обновления сущностей нам нужно использовать новый метод SetProperty. Первый аргумент SetProperty выбирает свойство, которое необходимо обновить с помощью лямбда-выражения, а второй аргумент — это новое значение этого свойства также с помощью лямбда-выражения, в котором мы также можем получать доступ к свойству. Например, здесь мы добавим префикс "New" к имени первой тысячи людей:
var personsUpdated =
context.Persons
.Where(p => p.PersonId <= 1_000)
.ExecuteUpdate(
p => p.SetProperty(
x => x.Name,
x => "New" + x.Name)
);
}

В результате возвращается количество обновлённых записей, а SQL код получается таким:
UPDATE [p]
SET [p].[Name] = N'New' + [p].[Name]
FROM [Persons] AS [p]
WHERE [p].[Id] <= CAST(1000 AS bigint)

Чтобы обновить несколько свойств за раз, просто вызовите методы SetProperty в цепочке:
….ExecuteUpdate(p =>
p.SetProperty(x => x.Name, x => "…")
.SetProperty(x => x.Age, x => 42)
);
}

Источник: https://timdeschryver.dev/blog/new-in-entity-framework-7-bulk-operations-with-executedelete-and-executeupdate
  • 👍 21
More from @netdeveloperdiary
  1. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  2. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  3. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  4. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  5. Oct 3, 2026Post #3360
  6. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →