【发布时间】:2021-11-29 18:58:27
【问题描述】:
我应该指出我是 .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
【问题讨论】:
-
如何运行迁移?
-
@GuruStron dotnet ef 数据库更新
-
咆哮:如果 migrationBuilder 允许我获取刚刚插入的数据,我什至不需要这个......
-
你有完整的复制品吗?运行
dotnet ef database update时,您可以添加启动项目,以便在运行迁移时使用。您还可以详细说明“migrationBuilder 允许我获取刚刚插入的数据”。 - 你想达到什么目标? -
您使用的是哪种类型的项目?如果您使用的是 API 或 Worker,您可以使用依赖注入来创建您的
DbContext,并且在这种情况下,您无需将与IConfiguration相关的任何内容带入您的 EF Core 上下文中还有任何理由特别是在 DBContext 创建期间读取?通常对带有 Startup.cs 的项目的建议是让 EFCore 为您注入DBContext,然后您可以在那里获取连接字符串并将其作为依赖注入的参数
标签: c# asp.net .net-core entity-framework-core