EF Core2.2:Scaffold-DbContext 不适用于 WPF 项目中的命名连接字符串

Jan*_*Jan 5 c# entity-framework entity-framework-core

我想在我的 .net Framework 4.7 项目中首先使用 EF Core 2.2 和数据库。运行此命令可以正常工作:

Scaffold-DbContext "data source=dbServer;initial catalog=myData;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Database
Run Code Online (Sandbox Code Playgroud)

但随后 MS 放下了这个警告:

警告 为了保护连接字符串中潜在的敏感信息,您应该将其从源代码中移出。有关存储连接字符串的指南,请参阅 http://go.microsoft.com/fwlink/?LinkId=723263

所以我认为我按照指示进行并更新了脚本如下:

Scaffold-DbContext "name=MyConnection" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Database
Run Code Online (Sandbox Code Playgroud)

这导致此错误:

使用了命名连接字符串,但在应用程序的配置中找不到名称“MyConnection”。请注意,仅在使用“IConfiguration”和服务提供程序时才支持命名连接字符串,例如在典型的 ASP.NET Core 应用程序中。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=850912

命名连接本身工作正常,我已经通过注释掉由 EF 核心生成的第一行并利用第二行来测试它:

//optionsBuilder.UseSqlServer("data source=dbServer;initial catalog=myData;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework");
            optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString);
Run Code Online (Sandbox Code Playgroud)

启动程序它可以连接并按预期显示数据。但我更愿意在 Scaffold-DbContext 中设置该设置。有任何想法吗?

为了完整起见,这里是 app.config:

<?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <connectionStrings>
       <add name="MyConnection" connectionString="data source=dbServer;initial catalog=myData;integrated security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
 </configuration>
...
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 3

EF Core2.2:Scaffold-DbContext 无法在 WPF 项目中使用命名连接字符串

事实。两个错误信息

请注意,仅在使用服务提供程序时才支持命名连接字符串IConfiguration,例如在典型的 ASP.NET Core 应用程序中。

和参数的Scaffold-DbContext命令文档-Connection

...对于 ASP.NET Core 2.x 项目,该值可以是name=<连接字符串的名称>。在这种情况下,名称来自为项目设置的配置源......

Scaffold-DbContext指示命名连接字符串不能与基于“旧版”(NET Framework)的项目中的命令一起使用app.config

所以Scaffold-DbContext你必须使用实际的连接字符串。并在此处命名连接字符串(我猜这是警告):

optionsBuilder.UseSqlServer(
    ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString);
Run Code Online (Sandbox Code Playgroud)