Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Abaikan entri duplikat dan komit entri yang berhasil di DbContext.SaveChanges() di EF Core

Sepertinya Anda memiliki masalah bisnis. Pertama, Anda perlu memutuskan apa yang akan terjadi ketika Anda sudah memiliki entitas dengan id yang sama dan seseorang mencoba memasukkan yang baru (informasi baru) dengan id yang sama.

Sepertinya Anda sudah memutuskan:Anda ingin membatalkan tindakan.

Itu entah bagaimana tidak biasa karena jika Anda menerima beberapa data baru dari klien API itu tentang entitas yang sudah ada di database Anda -> yang lebih mirip Pembaruan.

Ada beberapa perpustakaan yang dapat melakukan hal serupa:https://github.com/borisdj/EFCore.BulkExtensions (yang saat ini hanya bekerja dengan MSSQL)

Menggunakan perpustakaan ini (yang dikenal dan telah disebutkan oleh Microsoft sebagai Alat Inti EF:https://docs.microsoft.com/en-us/ef/core/extensions/ ) Anda memiliki kemungkinan untuk:

  • Sisipkan atau Perbarui semua data (semua kolom) jika Anda menemukan entitas dengan id yang sama (Upsert):

    context.BulkInsertOrUpdateAsync(entitiesList);

  • Sinkronkan entitas dari database Anda dengan entitas apa pun yang Anda terima dari klien:

    context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

Kemungkinan besar Anda tidak akan menemukan sesuatu yang sudah diterapkan untuk kasus Anda, tetapi Anda dapat menyesuaikan perpustakaan ini dengan:

BulkInsertOrDropAsync 

Yang akan melakukan sesuatu seperti:

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) 

Yang sebenarnya bukan DROP, tetapi akan membuat data Anda tetap utuh.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Meningkatkan kinerja Kueri MySQL - Permintaan berat matematika

  2. MySQL:Bandingkan ANTARA waktu

  3. Masalah MySql dan memasukkan ID terakhir tetap ada

  4. Rails Octopus Gem - Perilaku koneksi Replikasi Master-Slave saat slave sedang down

  5. BIGINT Out-of-range Error sejak MySQL 5.5