Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zignoruj ​​zduplikowane wpisy i zatwierdź udane w DbContext.SaveChanges() w EF Core

Wygląda na to, że masz problem biznesowy. Najpierw musisz zdecydować, co się stanie, gdy masz już podmiot o tym samym identyfikatorze i ktoś spróbuje wstawić nowy (nowe informacje) o tym samym identyfikatorze.

Wygląda na to, że już zdecydowałeś:chcesz porzucić akcję.

To trochę niezwykłe, ponieważ jeśli otrzymasz nowe dane od klientów tego API o encji, która już istniała w Twojej bazie danych -> wygląda to bardziej jak aktualizacja.

Istnieje kilka bibliotek, które mogą zrobić coś podobnego:https://github.com/borisdj/EFCore.BulkExtensions (który obecnie działa tylko z MsSQL)

Korzystanie z tej biblioteki (która jest znana i została już wspomniana przez Microsoft jako narzędzie EF Core:https://docs.microsoft.com/en-us/ef/core/extensions/ ) masz możliwość:

  • Wstaw lub zaktualizuj wszystkie dane (wszystkie kolumny), jeśli znajdziesz jednostkę o tym samym identyfikatorze (Upsert):

    context.BulkInsertOrUpdateAsync(entitiesList);

  • Synchronizuj encje ze swojej bazy danych z dowolnymi encjami, które otrzymujesz od klientów:

    context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

Najprawdopodobniej nie znajdziesz czegoś już zaimplementowanego dla swojego przypadku, ale możesz dostosować tę bibliotekę za pomocą:

BulkInsertOrDropAsync 

Który zrobi coś takiego:

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) 

Co tak naprawdę nie jest DROP, ale pozostawi Twoje dane nienaruszone.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zagregowane kliknięcia i wyświetlenia reklam

  2. Nie można upuścić pola w tabeli MariaDB/MySql za pomocą FOREIGN KEY

  3. zapytanie mysql, aby wybrać wszystko oprócz

  4. Limit czasu połączenia JDBC nie może zostać ponownie nawiązany

  5. MySql:usunąć wiersze tabeli w zależności od zduplikowanych wartości kolumn?