如何从 DBContext(实体框架核心)中的 App.config(不是 .net 核心应用程序)读取值

Posted

技术标签:

【中文标题】如何从 DBContext(实体框架核心)中的 App.config(不是 .net 核心应用程序)读取值【英文标题】:How to read value from App.config (not .net core app) in DBContext (which is entity framework core) 【发布时间】:2020-12-18 03:51:00 【问题描述】:

我正在使用带有新实体框架核心的旧应用程序(标准 .net 框架 wpf 应用程序)。

我在这里通过硬编码连接字符串设置了与数据库的连接:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

   optionsBuilder.UseSqlServer(@"server=baaa;database=baaa;User=saaa;Password=xsaa1;");

但我想将我的连接字符串移动到 App.config 或其他地方并从那里读取它,而不是保持硬编码。

由于我的 WPF 应用程序不是 .net 核心 WPF 应用程序,因此我不能使用 DI 编写如下内容:

IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();

那么问题是如何在实体框架核心的 DbContect 中从我的旧 WPF (.NET FRAMEWORK) 应用程序中读取连接字符串?

谢谢

干杯

【问题讨论】:

【参考方案1】:

您可以使用Microsoft's ConfigurationManager 它同时存在于 .net 核心和 .net 框架中。 在 .net 核心,您可以简单地从 nuget 添加,而在 .framework 只需添加 system.configuration dll

读取应用设置:

 var version=ConfigurationManager.AppSettings["APP_SETTING_KEY"].ConnectionString;

读取连接字符串:

 var cs =ConfigurationManager.ConnectionStrings["YOUR_CS_KEY"].ConnectionString;

【讨论】:

DbContext 在单独的项目中,所以我不确定它是否知道 appsettings?因为应用程序配置文件在另一个项目(WPF 项目)中? 请检查我的编辑。我在那里发布了一张结构图。 但由于该项目链接到您的主 WPF 之一,它应该知道使用它的配置。你试过了吗?

以上是关于如何从 DBContext(实体框架核心)中的 App.config(不是 .net 核心应用程序)读取值的主要内容,如果未能解决你的问题,请参考以下文章

实体框架核心 DbContext 和依赖注入

无法使用 DbContext 实体框架核心 SaveChanges()

实体框架核心和多线程

dotnet 核心中的 Dbcontext 对象瞬态

如何从实体框架 DbContext 收集当前的 SQL Server 会话 ID?

如何使用实体框架中的 DBContext 获取在另一列中具有重复数据的所有 ID?