我正在尝试实现一种拥有多个数据库(相同的数据库,都具有相同的表等)的方法,但我需要将它们分开,因此需要多个数据库。有没有办法让一个单一的 DBContext 和存储库模式可以与控制器中的所有这些(具有不同的连接字符串)进行交互。
(所有数据库都相同,只是数据库名称不同)
前任。我有 3 个控制器/端点api/course1
,每api/course2
门api/course3
课程都有一个数据库。我一直在查看各种文档,但在如何使用存储库模式完成它时遇到了困难。
谢谢!
我正在尝试实现一种拥有多个数据库(相同的数据库,都具有相同的表等)的方法,但我需要将它们分开,因此需要多个数据库。有没有办法让一个单一的 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
);
});
在这里,我使用依赖注入来获取有关当前请求和路由数据的信息,以确定连接字符串。您可以使用任何您想要的服务和任何您想要确定连接字符串的逻辑。
然后,当 ApplicationDbContext 注入到您的存储库类或控制器中时,它将使用该连接字符串进行该请求。