sql >> Database teknologi >  >> RDS >> Mysql

Ignorer duplikerede poster og begå succesfulde på DbContext.SaveChanges() i EF Core

Det ser ud til, at du har et forretningsproblem. Først skal du beslutte, hvad der vil ske, når du allerede har en enhed med det samme id på plads, og nogen forsøger at indsætte en ny (ny information) med det samme id.

Det ser ud til, at du allerede har besluttet dig:Du vil droppe handlingen.

Det er på en eller anden måde usædvanligt, fordi hvis du modtager nogle nye data fra klienter af den API om en enhed, der allerede eksisterede i din database -> det ligner mere en opdatering.

Der findes nogle biblioteker, der kan gøre noget lignende:https://github.com/borisdj/EFCore.BulkExtensions (som i øjeblikket kun virker med MsSQL)

Brug af dette bibliotek (som er et kendt bibliotek og allerede blev nævnt af Microsoft som værende et EF Core Tool:https://docs.microsoft.com/en-us/ef/core/extensions/ ) har du mulighed for at:

  • Indsæt eller opdater alle data (alle kolonner), hvis du finder en enhed med samme id (Upsert):

    context.BulkInsertOrUpdateAsync(entitiesList);

  • Synkroniser enheder fra din database med de enheder, du modtager fra klienter:

    context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

Du vil sandsynligvis ikke finde noget, der allerede er implementeret til din sag, men du kan justere dette bibliotek med:

BulkInsertOrDropAsync 

Hvilket vil gøre noget som:

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) 

Hvilket egentlig ikke er et DROP, men det vil efterlade dine data intakte.




  1. World Backup Day:Hvordan og hvornår skal du sikkerhedskopiere din database?

  2. PDO output utf8 indsæt

  3. Få den første mandag i en måned i SQLite

  4. Opdater værdier fra MYSQL-tabellen uden at genindlæse siden?