我正在构建一个web .net API,基本上我有需要SQL查询的控制器和服务(大的)和一个数据库来获取信息。我有很多SQL和4个数据库。所以无论基础,服务都做同样的事情,但最好的方法是如何在这些数据库之间切换?
SQL有自己的数据库,只有它们,除了它们的名称$listReptiles = [];
$listMammals = [];
for ($i = 1; $i <= 10; $i++)
{
switch(mt_rand(1,2))
{
case 1 :
$listReptiles[] = new Reptile();
break;
case 2 :
$listMammals[] = new Mammal();
break;
}
}
等之外,可以看到它们应该在哪个数据库上使用。
我正在使用实体框架代码第一种方法,我正在寻找选项如何做到这一点。
由于服务总是完全相同,可能会为每个基础创建4个上下文,并将正确的上下文传递给控制器中的服务(可能使用IF,这对我来说听起来不太好)
或者根据数据库和上下文创建4个控制器,每个控制器都传递正确的上下文......看起来也不合逻辑。
这就是我需要你帮助的原因:)。
所以概述: asp.net API,Controller和一个服务总是相同但是对于四个不同的数据库(接收SQL查询文件,从数据库读取查询并将信息作为Json发送到前端)。此外,查询有自己的DB(现在)。
答案 0 :(得分:0)
我和hbulens有同样的问题,我不确定你是如何决定使用哪个数据库的。如果没有这些信息,我会以某种方式假设您。假设不同的上下文具有相同的DbSets,我会在您的数据库上下文中覆盖OnConfiguring
并在那里创建连接字符串,类似这样
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString = $"<Your new connection string with {variables}>";
optionsBuilder.UseSqlServer(connectionString);
base.OnConfiguring(optionsBuilder);
}
这样你可以继续正常注入DbContext,你的消费者(控制器/服务)将获得他们需要的一个特定上下文,而不是获得所有可能的上下文。