sql >> データベース >  >> RDS >> Mysql

重複するエントリを無視し、EF CoreのDbContext.SaveChanges()で成功したエントリをコミットします

    ビジネス上の問題があるようです。まず、同じIDのエンティティが既に存在し、誰かが同じIDの新しいエンティティ(新しい情報)を挿入しようとした場合にどうなるかを決定する必要があります。

    あなたはすでに決定したようです:あなたはアクションをドロップしたいです。

    そのAPIのクライアントから、データベースにすでに存在しているエンティティに関する新しいデータを受け取った場合、それは更新のように見えるため、これはどういうわけか珍しいことです。

    同様のことを実行できるライブラリがいくつかあります: https://github.com/borisdj/EFCore.BulkExtensions (現在、MsSQLでのみ機能しています)

    このライブラリの使用(これは既知のライブラリであり、MicrosoftによってEFコアツールとしてすでに言及されています: https://docs.microsoft.com/en-us/ef/core/extensions/ )次の可能性があります:

    • 同じID(アップサート)のエンティティが見つかった場合は、すべてのデータ(すべての列)を挿入または更新します:

      context.BulkInsertOrUpdateAsync(entitiesList);

    • データベースのエンティティを、クライアントから受け取るエンティティと同期します。

      context.BulkInsertOrUpdateOrDeleteAsync(entitiesList);

    ほとんどの場合、ケースにすでに実装されているものは見つかりませんが、次のコマンドでこのライブラリを調整できます:

    BulkInsertOrDropAsync 
    

    これは次のようになります:

    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) 
    

    これは実際にはドロップではありませんが、データはそのまま残ります。




    1. MySQLにIPアドレスを保存する最も効率的な方法

    2. MySQLで月ごとにグループ化する方法

    3. mySQL MONTH()を取得して先行ゼロを使用しますか?

    4. PostgreSQL論理レプリケーションを使用して常に最新の読み取り/書き込みテストサーバーを維持する