[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на 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 і ознайомтеся з умовами навчання, ми спеціалізуємося тільки на індивідуальних заняттях, як для початківців, так і для просунутих програмістів. Ви можете взяти як одне заняття для опрацювання питання, що вас цікавить, так і кілька, для більш щільної роботи. Завдяки особистому кабінету, кожен студент підвищить якість свого навчання, у вашому розпорядженні:
- Доступ до пройденого матеріалу
- Тематичні статті
- Бібліотека книг
- Онлайн тестування
- Спілкування в закритих групах