gpt4 book ai didi

c# - DotNet Core 在启动运行后设置连接字符串

转载 作者:行者123 更新时间:2023-11-30 22:54:52 25 4
gpt4 key购买 nike

我有一个具有两个数据库连接的 Visual Studio 解决方案。第一个是包含用户名密码和数据库的目录。第二个是用户数据。我可以在“ConfigureServices”中为目录数据库设置连接,这很好。一旦用户尝试登录并成功,我就可以知道用户将连接到的数据库。

我的问题是,如何在启动运行后创建服务……如何在正常操作过程中使用连接字符串添加 DBcontext。根据我的搜索,如果您知道启动时的连接字符串,这是可以的。

var connection = @"Server=(localdb)\mssqllocaldb;Database=JobsLedgerDB;Trusted_Connection=True;ConnectRetryCount=0";
services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));

但是如果我在启动时没有连接字符串...当我终于有了连接字符串时,如何在项目已经启动并运行后添加服务?

最佳答案

Tolbxela 的另一个答案建议在需要时在需要的地方创建一个新的上下文,但如果您想使用依赖项注入(inject),那将不起作用。相反,您应该使用 AddDbContext 扩展方法在 Startup 类的 ConfigureServices 方法中提供这样的工厂,如 Camilo 在评论中所述那个答案:

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

...

services.AddDbContext<BloggingContext>(options =>
{
var customerId = serviceProvider.GetService<IHttpContextAccessor>().HttpContext?.User?.FindFirst("customerId")?.Value;
var connectionString =
$"bla blah blah ;Initial Catalog={customerId}";
options.UseSqlServer(connectionString);

在此示例中,初始目录设置为声明“customerId”的值。 (FindFirst 是我自己写的自定义扩展方法)。此示例只是为了让您了解该方法。

然后您可以像往常一样注入(inject)您的上下文:

public class MyController : Controller
{

public MyController(BloggingContext context)
{
...
}
};

关于c# - DotNet Core 在启动运行后设置连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55866647/

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