[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Расширения EF Core Bulk Extensions предоставляются библиотекой Entity Framework Extensions.
Z.EntityFramework.Extensions.EFCore — это сторонняя библиотека, расширяющая функциональность EF Core. Она предоставляет дополнительные возможности для работы с EF Core, в частности, в области массовых операций. Библиотека предоставляет эффективные способы выполнения таких CRUD-операций, как BulkInsert, BulkUpdate, BulkDelete, BulkMerge, BulkRead и WhereBulkContains.
Эти операции полезны, когда вам нужно выполнить несколько изменений в базе данных одновременно, минимизируя количество запросов к базе данных и повышая производительность приложения.
Для тестирования данных операция, подготовим основу. Я создал проект по типу Console App. В корне проекта, определим класс User, со следующим содержимым:
1 2 3 4 5 6 |
public class User { public int Id { get; set; } public string? Name { get; set; } public int Age { get; set; } } |
Загрузим библиотеку Entity Framework Core Sql Server, через Package Manager Console:
1 |
Install-Package Microsoft.EntityFrameworkCore.SqlServer |
Для работы с Bulk операциями, загрузи библиотеку Z.EntityFramework.Extensions.EFCore:
1 |
Install-Package Z.EntityFramework.Extensions.EFCore |
Теперь, определим класс ApplicationContext, со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class ApplicationContext : DbContext { public DbSet<User> Users { get; set; } = null!; public ApplicationContext() { Database.EnsureCreated(); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=testdb;Trusted_Connection=True;"); } } |
Для упрощения примера, базе данных создадим без миграций, а строку подключения я определил прямо в коде.
Приступим к Bulk операциями.
BulkInsert
BulkInsert — это функция, позволяющая вставлять в базу данных несколько записей в одном запросе. Это позволяет значительно повысить производительность вставки данных, особенно при работе с большими наборами данных.
Пример добавления коллекции пользователей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
static void Main() { List<User> users = new List<User>() { new User { Name = "Alex", Age = 30 }, new User { Name = "John", Age = 25 }, new User { Name = "Emily", Age = 28 }, new User { Name = "Michael", Age = 35 }, new User { Name = "Sophia", Age = 22 }, new User { Name = "William", Age = 27 }, new User { Name = "Emma", Age = 31 }, new User { Name = "Liam", Age = 29 }, new User { Name = "Olivia", Age = 26 }, new User { Name = "Noah", Age = 24 }, new User { Name = "Ava", Age = 32 }, new User { Name = "James", Age = 33 }, new User { Name = "Isabella", Age = 23 }, new User { Name = "Ethan", Age = 34 }, new User { Name = "Mia", Age = 21 } }; using (ApplicationContext db = new ApplicationContext()) { db.BulkInsert(users); } } |
BulkUpdate
BulkUpdate — это функция, позволяющая обновлять несколько записей в базе данных одним запросом. Это позволяет значительно повысить производительность обновления данных, особенно при работе с большими наборами данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
static void Main() { List<User> users = new List<User>() { new User { Id = 2, Name = "Alex", Age = 30 }, new User { Id = 3, Name = "John", Age = 25 }, new User { Id = 4, Name = "Emily", Age = 28 }, new User { Id = 5, Name = "Michael", Age = 35 }, new User { Id = 6, Name = "Sophia", Age = 22 }, new User { Id = 7, Name = "William", Age = 27 }, new User { Id = 8, Name = "Emma", Age = 31 }, new User { Id = 9, Name = "Liam", Age = 29 } }; using (ApplicationContext db = new ApplicationContext()) { db.BulkUpdate(users); } } |
BulkDelete
BulkDelete — это функция, позволяющая удалять несколько записей из базы данных одним запросом. Это позволяет значительно повысить производительность удаления данных, особенно при работе с большими массивами данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
static void Main() { List<User> users = new List<User>() { new User { Id = 2, Name = "Alex", Age = 30 }, new User { Id = 3, Name = "John", Age = 25 }, new User { Id = 4, Name = "Emily", Age = 28 }, new User { Id = 5, Name = "Michael", Age = 35 }, new User { Id = 6, Name = "Sophia", Age = 22 }, new User { Id = 7, Name = "William", Age = 27 }, new User { Id = 8, Name = "Emma", Age = 31 }, new User { Id = 9, Name = "Liam", Age = 29 } }; using (ApplicationContext db = new ApplicationContext()) { db.BulkDelete(users); } } |
BulkRead
BulkRead — это функция, позволяющая получить несколько записей из базы данных в одном запросе, используя список идентификаторов или сущностей. Это позволяет значительно повысить производительность поиска данных, особенно при работе с большими массивами данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
static void Main() { List<User> users = new List<User>() { new User { Id = 1}, new User { Id = 2}, new User { Id = 3 }, new User { Id = 4 }, new User { Id = 5 }, new User { Id = 6 }, new User { Id = 7 }, new User { Id = 8 }, new User { Id = 9 } }; using (ApplicationContext db = new ApplicationContext()) { var selectedUsers = db.Users.BulkRead(users); } } |
WhereBulkContains
WhereBulkContains— это функция, позволяющая фильтровать несколько записей из базы данных в одном запросе по списку идентификаторов или сущностей. Это может значительно повысить производительность поиска данных, особенно при работе с большими массивами данных. Данная функция очень похожа на BulkRead, но является отложенным методом, а не немедленным (поэтому для ее реализации требуется ToList()).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
static void Main() { List<User> users = new List<User>() { new User { Id = 1}, new User { Id = 2}, new User { Id = 3 }, new User { Id = 4 }, new User { Id = 5 }, new User { Id = 6 }, new User { Id = 7 }, new User { Id = 8 }, new User { Id = 9 } }; using (ApplicationContext db = new ApplicationContext()) { var selectedUsers = db.Users.WhereBulkContains(users).ToList(); } } |
Выводы
Z.EntityFramework.Extensions — это мощная библиотека, позволяющая ускорить выполнение операций манипулирования данными в приложении. Предоставление эффективных массовых операций, таких как BulkInsert, BulkUpdate, BulkDelete, BulkMerge, BulkRead и WhereBulkContains, позволяет значительно повысить производительность манипулирования данными (CRUD-операций) в приложении, особенно при работе с большими массивами данных.
Я надеюсь, что вам понравилось читать эту статью, и она оказалась легкой для понимания. Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии или исправления.
Так же вам может быть интересна предыдущая статья — Самый быстрый способ вставки в Entity Framework.
Вы хотите научится писать код на языке программирования C#?
Создавать различные информационные системы, состоящие из сайтов, мобильных клиентов, десктопных приложений, телеграмм-ботов и т.д.
Переходите к нам на страницу Dijix и ознакомьтесь с условиями обучения, мы специализируемся только на индивидуальных занятиях, как для начинающих, так и для более продвинутых программистов. Вы можете взять как одно занятие для проработки интересующего Вас вопроса, так и несколько, для более плотной работы. Благодаря личному кабинету, каждый студент повысит качество своего обучения, в вашем распоряжении:
- Доступ к пройденному материалу
- Тематические статьи
- Библиотека книг
- Онлайн тестирование
- Общение в закрытых группах
Живи в своем мире, программируй в нашем.