Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Bỏ qua các mục nhập trùng lặp và cam kết các mục nhập thành công trên DbContext.SaveChanges () trong EF Core

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao PDO ::lastInsertId trả về 0?

  2. Xuất bảng HBase sang mysql

  3. Triển khai đa đám mây để nhân rộng MySQL

  4. Gặp lỗi Mysql2 ::(lỗi kết nối SSL:ASN:xác nhận chữ ký khác không hợp lệ) trên Ứng dụng Heroku với AWS RDS

  5. Hiển thị hình ảnh từ đường dẫn trong PHP từ MySQL