sql >> Base de Datos >  >> RDS >> Mysql

Ignore las entradas duplicadas y confirme las correctas en DbContext.SaveChanges() en EF Core

Parece que tienes un problema de negocios en su lugar. Primero, debe decidir qué sucederá cuando ya tenga una entidad con la misma identificación y alguien intente insertar una nueva (nueva información) con la misma identificación.

Parece que ya lo ha decidido:desea abandonar la acción.

Eso es algo inusual porque si recibe algunos datos nuevos de los clientes de esa API sobre una entidad que ya existía en su base de datos -> se parece más a una Actualización.

Existen algunas bibliotecas que pueden hacer algo similar:https://github.com/borisdj/EFCore.BulkExtensions (que actualmente solo funciona con MsSQL)

Usando esta biblioteca (que es conocida y Microsoft ya la mencionó como una herramienta principal de EF:https://docs.microsoft.com/en-us/ef/core/extensions/ ) tienes la posibilidad de:

  • Inserte o actualice todos los datos (todas las columnas) si encuentra una entidad con la misma identificación (Upsert):

    context.BulkInsertOrUpdateAsync(entitiesList);

  • Sincronice las entidades de su base de datos con las entidades que reciba de los clientes:

    context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

Lo más probable es que no encuentre algo ya implementado para su caso, pero puede ajustar esta biblioteca con:

BulkInsertOrDropAsync 

Que hará algo como:

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) 

Lo cual no es realmente un DROP, pero dejará sus datos intactos.