问题描述
我正在尝试实现一种具有多个数据库(相同的数据库,所有的数据库都具有相同的表等)的方法,但是我需要将它们分开,从而具有多个DB。有没有一种方法可以使单个DBContext和存储库模式可以与控制器中的所有DBContext和存储库模式(具有不同的连接字符串)进行交互。
例如我有3个控制器/端点api/course1
,api/course2
和api/course3
,每个课程都有一个数据库。我一直在查看各种文档,但是在如何使用存储库模式来完成它方面遇到了困难。
谢谢!
解决方法
是的,您可以根据当前请求使用不同的连接字符串。
在您的startup.cs中,更改代码以将DbContext
配置为类似于以下示例:
services.AddDbContext<ApplicationDbContext>((serviceProvider,options) =>
{
var httpContext = serviceProvider.GetRequiredService<IHttpContextAccessor>().HttpContext;
var routeData = httpContext.GetRouteData();
string connectionString;
// insert here code to determine connection string based on route data.
options.UseSqlServer(
connectionString
);
});
在这里,我正在使用“依赖关系注入”来获取有关当前请求的信息,并路由数据以确定连接字符串。您可以使用所需的任何服务以及所需的逻辑来确定connectionString。
然后,当将ApplicationDbContext注入到存储库类或控制器中时,它将对该请求使用该连接字符串。