sql >> Databáze >  >> RDS >> Mysql

Ignorujte duplicitní položky a potvrďte ty úspěšné pomocí DbContext.SaveChanges() v EF Core

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á.




  1. MySQL:jak mohu vidět VŠECHNA omezení v tabulce?

  2. Připojení k MySQL pomocí Groovy

  3. INSERT INTO...SELECT pro všechny sloupce MySQL

  4. Jak vložit soubor do databáze Oracle?