c# - 如何从另一个项目的appsettings文件读取连接字符串

标签 c# asp.net asp.net-core asp.net-web-api

项目说明:

我是 ASP NET CORE 新手。 使用 DB First 我的解决方案中有三个项目。哪些是。

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 向数据项目中的 GetUser() 方法发送调用,然后数据项目使用 Db Context 实例并检索数据。

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

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

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

optionsBuilder.UseSqlServer("name=UserCloudConnectionString");

我尝试了不同的解决方案like this但无法得到它。我必须在哪个项目中添加文件以及我需要在 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 类没有硬连线来使用配置或任何其他中间件,因此它无法按名称读取连接字符串。不过,它是为了处理外部配置而构建的。在生成的代码中,!optionsBuilder.IsConfigured 检查 DbContext 是否已配置,例如通过 AddDbContext :

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

即使您不使用依赖注入(inject),您也可以通过DbContext(DbContextOptions)创建并传递连接设置。构造函数。 DbContextOptions是一个抽象类,所以你需要使用 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);

关于c# - 如何从另一个项目的appsettings文件读取连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68207750/

相关文章:

c# - 如何将 C# Azure Function App 添加到 Azure 资源组项目以进行部署

c# - 为什么 Convert.ToInt32 ('1' ) 返回 49?

java - 如何启动控制台并从 Windows 服务中读取输出或模拟它?

json - 当我通过 AJAX 获取 JSON 数据时,数据存储在哪里?

c# - 如何单元测试方法调用 IConfiguration.Get<T> 扩展

c# - Websockets - 断开服务器消息

javascript - 通过 AJAX 请求发送 ® 字符时出现问题

c# - 错误消息 "A potentially dangerous Request.Form value"

asp.net - 在 web.sitemap 中使用 URL 通配符?

c# - anchor 标签助手在新窗口选项卡中打开 View