我正在使用Asp.Net Core和Entity Framework Core开发新的REST API。我们将移植来自使用水平数据库分区(分片)的旧版系统中的数据。我正在尝试一种在EF Core中处理此问题的好方法。我们以前的分片策略涉及一个中央Prime数据库和多个Customer数据库。所有查询都包含一个CustomerId
。我们使用CustomerId查询Prime数据库,以确定哪个Customer数据库包含特定客户的数据。数据库模式如下所示:
主数据库
dbo.Database
DatabaseId INTEGER
ConnectionString VARCHAR(200)
dbo.Customer
CustomerId BIGINT
DatabaseId INTEGER
Run Code Online (Sandbox Code Playgroud)
客户数据库
dbo.Order
CustomerId BIGINT
OrderId INT
...
Run Code Online (Sandbox Code Playgroud)
用于获取订单的REST调用示例类似于 http://foo.com/api/Customers/{CustomerId}/Orders/{OrderId}
我需要在CustomerDbContext
每个REST请求中使用动态确定的连接字符串。是否应DbContext
为每个请求创建新的实例?或者,我可以在运行时更改连接字符串吗?
如果要创建新的DbContext,该如何处理?我可以找到的大多数示例代码都使用Startup.cs中的依赖注入来创建单例DbContext
。
.net entity-framework entity-framework-core .net-core asp.net-core