我有一个Web应用程序,允许用户查看数据。我们的用户来自几个不同的位置,每个位置都有自己的数据库。我希望能够基于用户的登录名连接到适当的数据库,很不幸,我对ASP.NET/EF Core / Razor Pages还不够熟悉,无法弄清楚该如何做。
我已经查看了一些文档和其他文章,但尚未找到最终的解决方案。我怀疑我可能需要为每个数据库实例化一个上下文,然后在页面加载时使用DI来选择适当的上下文,但我不确定该解决方案从哪里开始。
用户存储在完全独立的数据库中,该数据库用于我们的IdentityContext。目前,仅向我们的客户之一提供此Web应用程序,因此Startup.cs代码如下所示:
services.AddDbContext<Models.MyContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("ConnectionStringIdentifier"));
});
我正在寻找有关解决此问题的最佳策略的建议。我是否需要使用每个不同的连接字符串来调用services.AddDbContext <...>(...)?用户登录后,有什么方法可以在运行时更改上下文的数据库吗?根据我的阅读,前者似乎比后者更有可能。 EFCore上下文似乎不允许对其Database属性进行任何操作,并且Razor页面的上下文被传递到构造函数中,而我从未在自己的代码中手动对其进行调用。
任何建议都值得赞赏,谢谢!