質問: 私は、エントリを挿入するためにEFコアを使用していると私は、私はこのコード行デバッグするときに気づい`context.MyEntityDbSet.AddRangeAsync(records)`とは対照的に、それが負荷に秒かかり`context.MyEntityDbset.AddRange(records)` 、それは瞬時に起こります。 `AddRangeAsync`メソッドを呼び出すときにDB呼び出しが発生しますか? `AddRange`ものとは違うの`AddRange`か?
回答: 公式EFコアドキュメントによると、 `AddRangeAsync(IEnumerable, CancellationToken)`は、データベースラウンドトリップを必要とするような特別な値ジェネレーターで使用されることになっています。たとえば、事前に`SqlServerValueGenerationStrategy.SequenceHiLo`を使用してIDのブロックを割り当てる場合、新しいエンティティがEFによって追跡されるとき、最初にデータベースを照会し、新しい「Hi」を要求する必要があります(Hi / Loアルゴリズムの詳細は、ここにありますHi / Loアルゴリズムとは? )そのため、エンティティを`Added`状態に設定するだけで、 `SqlServerValueGenerationStrategy.SequenceHiLo`が不要な場合は、 `AddRange`が使用されます。