项目说明:
我是 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/