c# - 在 EF 上下文中使用 appsettings.json 配置
问题描述
我应该指出我是 .NET 的新手......
我有以下 appsettings.json 文件:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"MyContext": "Host=localhost;Database=test;Username=user;Password=''"
}
}
在 MyContext.cs 文件中,我想从 appsettings.json 配置中读取连接字符串:
using Microsoft.EntityFrameworkCore;
using System;
using System.Configuration;
namespace My.Models
{
public partial class MyContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
Console.WriteLine(ConfigurationManager.ConnectionStrings.Count);
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseNpgsql(ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString);
}
}
}
但是ConfigurationManager.ConnectionStrings["MyContext"].ConnectionString
是空的,任何想法为什么?
我在 Startup.cs via 中成功使用了配置文件Configuration.GetConnectionString("MyContext")
,但是在这里我想从这个配置中读取连接字符串以用于 ASP.NET 应用程序之外的情况(即在我想做的 EF 迁移中using var db = new MyContext();
),但不知道为什么上面返回null。
ConfigurationManager 不是从我的 appsettings.json 文件中读取吗?不知道如何判断,因为ConfigurationManager.ConnectionStrings.Count
返回 1,所以我很困惑。有什么明显的错误有人可以看到吗?
我正在使用 .NET Core 5 和 EF Core 版本 5
解决方案
在 ef core 中定义连接字符串的常用方法是
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseNpgsql(@"Host=localhost;Database=test;Username=user;Password=password");
}
您可以手动访问 IConfiguration:
- 将此软件包安装到 ef 项目中
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
- 构建 IConfiguration
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseNpgsql(configuration.GetConnectionString("DefaultConnection"));
}
如果你的 Ef 核心在一个特殊的项目中,你必须将 appsetings.json 复制到这个项目中
如果您在查找 appsettings 文件夹时遇到问题,您可以直接定义路径
// .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile(@"C:\....\appsettings.json")
推荐阅读
- haskell - 如何在 Haskell 中合并不同类型的地图?
- android - 安装APK时缺少lib文件夹
- qt - 如何在 Qfile 中写入而不覆盖?
- javascript - 如何在 react-mapBox-gl 上显示任何 Circle?
- java - 如何打印矩阵中左对角线下方的数字?
- php - 如何从 Doctrine 获取 SQL 以将实体插入另一个数据库/连接?
- java - 使用@OneToMany 删除子实体而不删除父实体
- ios - 如何将选定的文件复制到应用程序的目录
- regex - 使用正则表达式从查询字符串中提取值
- docker - 将文件从 docker 容器保存到主机的问题