Công nghệ - 08/04/2025 07:07:00
Trong hệ sinh thái .NET, những cải tiến trong core framework nói chung và Entity Framework cực kỳ quan trọng đối với developers chúng ta.
Trong bài viết này, tôi xin giới thiệu về tính năng Batch Update trong Entity Framework Core 8 (EF Core 8) – một cải tiến quan trọng giúp tối ưu hóa hiệu suất khi xử lý dữ liệu lớn. Đồng thời, so sánh Batch Update của EF Core 8 với các thư viện phổ biến như Dapper và EFCore.BulkExtensions (về cách sử dụng, hiệu suất, v.v.), để chúng ta có nhiều góc nhìn khi lựa chọn công nghệ cho sản phẩm, dự án của mình.
Batch Update trong EF Core 8 được thể hiện qua các phương thức ExecuteUpdate và ExecuteDelete, lần đầu xuất hiện ở EF Core 7 và được cải tiến trong EF Core 8.
Đây là các methods cho phép thực hiện cập nhật hoặc xóa hàng loạt trực tiếp trên cơ sở dữ liệu mà không cần tải dữ liệu vào bộ nhớ (in-memory), giảm thiểu round-trip và tối ưu tài nguyên sử dụng.
VD sử dụng (trong C#):
Và câu SQL được sinh ra
Method này chỉ cần một câu lệnh SQL duy nhất, thay vì tải từng bản ghi, chỉnh sửa, rồi lưu lại như cách truyền thống.
Ngoài EF Core, 2 libraries được sử dụng nhiều trong .net để thao tác với database là Dapper và EFCore.BulkExtensions. Sơ qua 2 thư viện này, trong trường hợp các bạn chưa dùng.
Và dưới đây là so sánh chi tiết giữa Batch Update trong EF Core 8 với Dapper và EFCore.BulkExtensions, tập trung vào cách sử dụng, hiệu suất, và tính ứng dụng.
Cách sử dụng EF Core 8:

Cách sử dụng Dapper:

Đánh giá Hiệu suất:
Với 10,000 bản ghi:
Dapper nhanh hơn khoảng 10-20% do không có overhead từ LINQ hay change tracking. Tuy nhiên, với số lượng bản ghi lớn (100,000+), sự khác biệt này không đáng kể vì thời gian chủ yếu nằm ở cơ sở dữ liệu.
Ưu điểm Dapper:
Ưu điểm EF Core 8:
Kịch bản sử dụng:
Cách sử dụng EF Core 8:

Cách sử dụng EFCore.BulkExtensions:

Đánh giá hiệu suất:
Với 10,000 bản ghi:
EFCore.BulkExtensions nhanh hơn ~20-30% nếu dữ liệu đã có trong bộ nhớ, nhờ cơ chế bulk copy (như SqlBulkCopy trên SQL Server). Nhưng nếu tính cả thời gian tải dữ liệu (ToList()), tổng thời gian có thể tương đương hoặc chậm hơn EF Core 8.
Với 100,000 bản ghi:
Ưu điểm EFCore.BulkExtensions:
- Linh hoạt: hỗ trợ BulkInsert, BulkDelete, BulkMerge.
- Tùy chỉnh cao (chọn cột cập nhật, batch size).
Ưu điểm EF Core 8:
Kịch bản sử dụng:

Ưu điểm:
Hạn chế:
Kịch bản:
So với EF Core 6 trở về trước
Cách hoạt động cũ: Trước EF Core 7, để cập nhật hàng loạt, bạn phải:
So với EF Core 7
Giới thiệu ExecuteUpdate: EF Core 7 lần đầu mang đến ExecuteUpdate và ExecuteDelete, đánh dấu bước ngoặt trong xử lý batch.
Cải tiến trong EF Core 8
Batch Update trong EF Core 8 là một bước tiến lớn so với các phiên bản cũ (EF6, EF7), mang lại hiệu suất vượt trội.
So với Dapper, nó thua về tốc độ tuyệt đối nhưng thắng về bảo trì và tích hợp. So với EFCore.BulkExtensions, nó tiết kiệm RAM và đơn giản hơn, nhưng kém linh hoạt trong các kịch bản phức tạp.
Ở phía tôi, tôi vẫn khuyên dùng EF Core 8 cho các tác vụ batch cơ bản trong dự án đã dùng EF, kết hợp Dapper hoặc EFCore.BulkExtensions khi cần tối ưu hóa chuyên sâu.
Happy coding!
/Son Do
#EntityFrameworkCore8 #Dappe #DotNet #Programming #DotNetPerformance #SQLBestPractices #CodingTips #TechTutorial #SoftwareDevelopment
#wecommit100xshare #1percenterbetter