如何从另一个项目 appsettings 文件中读取连接字符串

how to read connection string from another project appsettings file

项目说明:

我是 ASP NET CORE 的新手。 首先使用数据库 我的解决方案中有三个项目。哪些是。

User.API (web api project)

User.Data (c# class library having database methods and db insatace)

User.Model (c# class library having scaffolding db context and generated model classes)

请求流程就像,Api 发送对 Data project 中的 GetUser() 方法的调用,然后数据项目使用 Db 上下文实例并检索数据。

问题: 在上下文文件中我有

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
              optionsBuilder.UseSqlServer("Server=.;Database=UserDB;Trusted_Connection=True;");
            }
        }

我想使用命名连接而不是像下面这样的硬编码连接字符串

optionsBuilder.UseSqlServer("name=UserCloudConnectionString");

我尝试了不同的解决方案 但无法解决。我必须在哪个项目中添加文件以及我需要在 startup.cs 文件

中添加 json 文件的位置

如有任何帮助,我们将不胜感激。

不要在OnConfiguring中配置连接字符串。在注册 DbContext 的 AddDbContext 调用中执行此操作。那时您可以访问 Configuration 并可以调用 Configuration.GetConnectionString("MyConnection") 来获取连接字符串。

services.AddDbContext(optionsBuilder=>
{
    var cns=Configuration.GetConnectionString("UserCloudConnectionString");
    optionsBuilder.UseSqlServer(cns);
}        

appsettings 不是特殊文件,web.config 是。它只是包含设置的 JSON 文件的默认名称。此类设置(包括连接字符串)可以来自环境变量、命令行参数或其他来源。要阅读它们,您需要访问配置中间件,例如通过 IConfiguration.

DbContext class 未硬连接到使用配置或任何其他中间件,因此它无法按名称读取连接字符串。不过,它 是为处理外部配置而构建的。在生成的代码中,!optionsBuilder.IsConfigured 检查 DbContext 是否已经配置,例如 AddDbContext :

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    if (!optionsBuilder.IsConfigured)
    {
        ......
    }
}

即使您不使用依赖注入,您也可以通过 DbContext(DbContextOptions) constructor. DbContextOptions is an abstract class, so you need to use a DbContextOptionsBuilder< T> 创建并传递连接设置来创建它:

var cns=... //Get the connection string from somewhere
var optionsBuilder=new DbContextOptionsBuilder<MyDbContext>();
var options=optionsBuilder
                 .UseSqlServer(cns)
                 .Options;

using var ctx=new MyDbContext(options);