如何从另一个项目 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);
项目说明:
我是 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
文件
如有任何帮助,我们将不胜感激。
不要在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);