私はAsp.NetコアとEntity Frameworkコアを使用して新しいREST APIを開発しています。水平データベース分割(シャーディング)を使用するレガシー・システムからデータを移植します。私はEFコアでこれを処理する良い方法を考えようとしています。私たちの以前のシャーディング戦略には、Primeデータベースの中心と複数のCustomerデータベースが含まれていました。すべてのクエリにはCustomerId
が含まれています。 PrimeデータベースにCustomerIdを照会して、特定の顧客のデータを含む顧客データベースを特定します。データベース・スキーマは次のようになります:Entity Frameworkコアを使用したシャーディングストラテジー
プライムデータベース
dbo.Database
DatabaseId INTEGER
ConnectionString VARCHAR(200)
dbo.Customer
CustomerId BIGINT
DatabaseId INTEGER
顧客データベースを
dbo.Order
CustomerId BIGINT
OrderId INT
...
http://foo.com/api/Customers/{CustomerId}/Orders/{OrderId}
私は持っている必要がありますCustomerDbContext
は、各REST要求と共に動的に決定された接続文字列を使用する。リクエストごとにDbContext
の新しいインスタンスを作成する必要がありますか?または、実行時に接続文字列を変更できますか?
新しいDbContextを作成する場合、どうすればよいですか?私が見つけることができるサンプルコードのほとんどは、Startup.csからDependency Injectionを使用してシングルトンDbContext
を作成します。