【发布时间】:2019-08-07 14:36:25
【问题描述】:
在尝试使用 ConfigurationManager.ConnectionStrings["TestingDatabase"].ConnectionString 访问 connectionString 键时,在 Visual Studio 2019 内的包管理器控制台上运行 Add-Migration 会引发 NullReferenceException
这是 Windows 上的空白项目。我创建了一个 Windows 窗体应用程序 (.NET Core) 并安装了基本要求 - EntityFrameworkCore、EntityFrameworkCore 工具和 System.Configuration.ConfigurationManager。 我手动创建了一个 App.config 文件,内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="TestingDatabase" connectionString="myConnectionString"/>
</connectionStrings>
</configuration>
在 Debug (F5) 中运行代码,命令
Console.WriteLine(ConfigurationManager.ConnectionStrings["TestingDatabase"].ConnectionString); 给了我myConnectionString,这是预期的结果。
包管理器控制台中的相同命令(在执行Add-Migration InitialMigration 期间)会引发System.NullReferenceException。
该解决方案包含一个项目,该项目设置为启动项目,也是包管理器控制台中的默认项目。
包管理器控制台似乎没有正确读取我的 App.config,尽管似乎没有任何明显的配置错误,因为运行该项目通常工作正常。 我不知道可能出了什么问题,所以如果需要更多信息,请告诉我。
编辑:这个问题.Net Standard 2.0 ConfigurationManager Doesn't Read Connection Strings 是昨天发布的,似乎与我的问题非常相似。
【问题讨论】:
-
数据库本身是否已经创建?试试这个命令:dotnet ef database update
-
问题发生在建立数据库连接之前。如果我使用原始字符串 (optionsBuilder.UseNpgsql("myConnectionString");),则建立连接并且迁移和数据库更新都有效。当我使用 ConfigurationManager 时会出现问题 (optionsBuilder.UseNpgsql(ConfigurationManager.ConnectionStrings["TestingDatabase"].ConnectionString);)
-
您使用的是哪个版本的 .net-core?
-
我使用的是 .NET Core 3.0。我也尝试使用 2.2 版,但没有成功。这个问题似乎与我的问题有关,但我不明白解决方案。将“ConfigurationManager 添加到 .Net Framework 应用程序”是什么意思?就我而言,ConfigurationManager 已经是 Dependencies -> NuGet -> System.Configuration.ConfigurationManager 的依赖项。
标签: visual-studio .net-core entity-framework-core connection-string