Có vẻ như bạn đang gặp sự cố kinh doanh. Đầu tiên, bạn cần quyết định điều gì sẽ xảy ra khi bạn đã có một thực thể có cùng id và ai đó cố gắng chèn một thực thể mới (thông tin mới) với cùng một id.
Có vẻ như bạn đã quyết định:Bạn muốn bỏ hành động.
Điều đó không bình thường bằng cách nào đó bởi vì nếu bạn nhận được một số dữ liệu mới từ các máy khách của API đó về một thực thể đã tồn tại trong cơ sở dữ liệu của bạn -> trông giống như một Bản cập nhật hơn.
Có một số thư viện có thể làm điều gì đó tương tự: https://github.com/borisdj/EFCore.BulkExtensions (hiện chỉ hoạt động với MsSQL)
Sử dụng thư viện này (thư viện đã biết và đã được Microsoft đề cập là Công cụ lõi EF: https://docs.microsoft.com/en-us/ef/core/extensions/ ) bạn có khả năng:
-
Chèn hoặc Cập nhật tất cả dữ liệu (tất cả các cột) nếu bạn tìm thấy một thực thể có cùng id (Upsert):
context.BulkInsertOrUpdateAsync(entitiesList);
-
Đồng bộ hóa các thực thể từ cơ sở dữ liệu của bạn với bất kỳ thực thể nào bạn nhận được từ máy khách:
context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);
Hầu hết có thể bạn sẽ không tìm thấy thứ gì đó đã được triển khai cho trường hợp của mình nhưng bạn có thể điều chỉnh thư viện này bằng:
BulkInsertOrDropAsync
Điều gì sẽ làm một cái gì đó như:
WHEN MATCHED THEN UPDATE SET A.ID=A.ID --The ID's are already the same so nothing will happen
WHEN NOT MATCHED THEN INSERT(A.ID,A.NAME,A.CODE,A.DESCRIPTION)
Đây không thực sự là một DROP, nhưng nó sẽ giữ nguyên dữ liệu của bạn.