質問: 私はEntity Framework Core HiLoパターンで "Hi"部分がデータベースで管理され、 "Lo"部分はEntity Frameworkによってメモリ内で管理されていることを読んだことがあります。 Entity Frameworkは、データベースへのラウンドトリップなしで "Lo"パートをどのように生成しますか? 要求間の "Lo"値はどのように維持されますか? 最も重要なのは、このパターンのスレッドの安全性ですか? ありがとう!
回答: HiLoジェネレータは、サーバ上にIDのブロックを予約し、必要に応じてクライアント上のそのブロックからIDを使用して時々動作します。ブロックを予約するときにデータベースをヒットする必要があるだけなので、ブロックサイズが100の場合は100 IDごとにラウンドトリップします。 はい、ブロックがデータベースサーバーによってアトミックに割り当てられているため、複数のコンテキストで同時にIDを割り当てることは安全です。各`DbContext`インスタンスは独自のブロックを持ちます。