gpt4 book ai didi

c# - 使用不同的数据库,具有不同的DBcontext,并根据不同的URL请求连接到它

转载 作者:行者123 更新时间:2023-12-03 03:54:03 28 4
gpt4 key购买 nike

我们实际上有一个在线应用程序,其中包括一个ChatBot

这个聊天机器人可以向我们显示数据库中的不同信息,例如

我:“Projcet1 的预计预算是多少”

聊天机器人:“项目 1 的预计预算为 5 万欧元”

好吧。现在,我们将为不同的公司部署这个应用程序。每个公司都有不同的数据库。

对于那些不同的数据库(目前有 2 个),我创建了 2 个上下文。我有 2 个模型与这些数据库交互,我可以为每个模型添加 Controller 。

services.AddDbContext<data_firstContext>(options =>
{
options.UseMySQL(Configuration.GetConnectionString("Database1"));

});

services.AddDbContext<data_secondContext>(options =>
{
options.UseMySQL(Configuration.GetConnectionString("Database2"));

});

现在的问题是,我如何选择连接到第一个数据库或第二个数据库。我可以从前端发送应用程序的 URL header 或类似的东西,或者只是在我猜的某个地方捕获它,但是如何根据 Url 请求或我在参数中给出的内容从一个切换到另一个从前端。我在网上查了一下,但我所尝试的方法都没有真正起作用。如果有人有想法,那真的会对我有帮助!谢谢

最佳答案

假设您使用 EF core,则不必从 UI 传递任何参数。您可以通过定义不同的DBContext直接做到这一点,并通过使用依赖注入(inject)在服务的构造函数中使用它们。例如:

Startup.cs:

services.AddDbContext<data_firstContext>(options =>
{
options.UseMySQL(Configuration.GetConnectionString("Database1"));

});

services.AddDbContext<data_secondContext>(options =>
{
options.UseMySQL(Configuration.GetConnectionString("Database2"));

});

FirstDbContext.cs:

public class FirstDbContext : DbContext
{
public DbSet<ViewModels.Tower> Towers { get; set; }
public DbSet<ViewModels.Motherboard> Motherboards { get; set; }

public FirstDbContext(DbContextOptions<FirstDbContext> options)
: base(options)
{
}
}

AdminController.cs:

[Authorize(Policy = "RequireAdminRole")]
public class AdminController : Controller
{
private readonly FirstDbContext _context;

public AdminController(FirstDbContext context)
{
_context = context;
}

public IActionResult Index()
{
return View();
}

public IActionResult Towers()
{
var model = _context.Towers.ToList();
return View(model);
}
}

看看这个:Entity Framework Core Using multiple DbContexts

关于c# - 使用不同的数据库,具有不同的DBcontext,并根据不同的URL请求连接到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65342293/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com