Mysql
 sql >> база данни >  >> RDS >> Mysql

Игнорирайте дублиращи се записи и записвайте успешни такива в DbContext.SaveChanges() в EF Core

Изглежда, че имате бизнес проблем. Първо трябва да решите какво ще се случи, когато вече имате обект със същия идентификатор и някой се опита да вмъкне нов (нова информация) със същия идентификатор.

Изглежда, че вече сте решили:искате да откажете действието.

Това е някак необичайно, защото ако получите нови данни от клиенти на този API за обект, който вече е съществувал във вашата база данни -> това прилича повече на актуализация.

Съществуват някои библиотеки, които могат да правят нещо подобно:https://github.com/borisdj/EFCore.BulkExtensions (който в момента работи само с MsSQL)

Използване на тази библиотека (която е известна и вече беше спомената от Microsoft като основен инструмент на EF:https://docs.microsoft.com/en-us/ef/core/extensions/ ) имате възможност да:

  • Вмъкнете или актуализирайте всички данни (всички колони), ако намерите обект със същия идентификатор (Upsert):

    context.BulkInsertOrUpdateAsync(entitiesList);

  • Синхронизирайте обекти от вашата база данни с всички обекти, които получавате от клиенти:

    context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

Най-вероятно няма да намерите нещо, което вече е внедрено за вашия случай, но можете да коригирате тази библиотека с:

BulkInsertOrDropAsync 

Което ще направи нещо като:

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) 

Което всъщност не е ИЗПУСКАНЕ, но ще остави данните ви непокътнати.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql заявка ПОКАЗВАНЕ НА КОЛОНИ ОТ таблица като 'colmunname':questions

  2. MySQL - Постоянна връзка срещу пул на връзки

  3. Откриване на емотикони в низ

  4. Как да конвертирам този MySQL израз в symfony Propel?

  5. Qt QMYSQL драйверът не е зареден в Windows