Bal*_*ler 5 c# asp.net entity-framework-core .net-core
我应该指出我是 .NET 的新手......
我有以下 appsettings.json 文件:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"ConnectionStrings": {
"MyContext": "Host=localhost;Database=test;Username=user;Password=''"
}
}
Run Code Online (Sandbox Code Playgroud)
在 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但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");
}
Run Code Online (Sandbox Code Playgroud)
您可以手动访问 IConfiguration:
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.Json
Run Code Online (Sandbox Code Playgroud)
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseNpgsql(configuration.GetConnectionString("DefaultConnection"));
}
Run Code Online (Sandbox Code Playgroud)
如果您的 Ef 核心位于特殊项目中,则必须将 appsetings.json 复制到该项目
如果您在查找 appsettings 文件夹时遇到问题,可以直接定义路径
// .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile(@"C:\....\appsettings.json")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4751 次 |
| 最近记录: |