gpt4 book ai didi

c# - 在 EF 上下文中使用 appsettings.json 配置

转载 作者:行者123 更新时间:2023-12-02 01:57:03 24 4
gpt4 key购买 nike

我应该指出我是 .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是空的,有什么想法吗?

我通过 Configuration.GetConnectionString("MyContext") 在 Startup.cs 中成功使用配置文件,但在这里我想从这个配置中读取连接字符串以用于 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:

  1. 将这个包安装到 ef 项目中
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
  1. 构建 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复制到这个项目中

如果找不到appsetings文件夹可以直接定义路径

// .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile(@"C:\....\appsettings.json")

关于c# - 在 EF 上下文中使用 appsettings.json 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69519196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com