Vypadá to, že máte obchodní problém. 1. musíte se rozhodnout, co se stane, když již máte na místě entitu se stejným ID a někdo se pokusí vložit novou (nové informace) se stejným ID.
Vypadá to, že jste se již rozhodli:Chcete akci upustit.
To je nějak neobvyklé, protože pokud od klientů tohoto API obdržíte nějaká nová data o entitě, která již existovala ve vaší databázi -> vypadá to spíše jako aktualizace.
Existují některé knihovny, které dokážou něco podobného:https://github.com/borisdj/EFCore.BulkExtensions (který aktuálně funguje pouze s MsSQL)
Použití této knihovny (která je známá a již byla společností Microsoft zmíněna jako základní nástroj EF:https://docs.microsoft.com/en-us/ef/core/extensions/ ) máte možnost:
-
Vložit nebo aktualizovat všechna data (všechny sloupce), pokud najdete entitu se stejným ID (Upsert):
context.BulkInsertOrUpdateAsync(entitiesList);
-
Synchronizujte entity z vaší databáze s entitami, které obdržíte od klientů:
context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);
S největší pravděpodobností nenajdete něco již implementovaného pro váš případ, ale můžete tuto knihovnu upravit pomocí:
BulkInsertOrDropAsync
Což udělá něco jako:
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ž ve skutečnosti není KAPKA, ale vaše data zůstanou nedotčená.