【问题标题】:EF Core2.2: Scaffold-DbContext not working with named connection string in WPF projectEF Core2.2:Scaffold-DbContext 不适用于 WPF 项目中的命名连接字符串
【发布时间】:2020-01-02 18:08:24
【问题描述】:

我想首先在我的 .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

但随后 MS 发出此警告:

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

所以我认为我按照指示做了,并将脚本更新如下:

Scaffold-DbContext "name=MyConnection" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Database

导致此错误:

使用了命名连接字符串,但在应用程序的配置中找不到名称“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);

启动程序它可以连接并按预期显示数据。但我更愿意在 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>
...

【问题讨论】:

  • “但随后 MS 放下了这个警告” 在哪里?
  • 您的 .Net 框架是控制台应用吗?
  • @IvanStoev: 在从 dbcontext 派生的生成类中带有 'optionsBuilder.UseSqlServer(' 的行的正上方
  • @user10728126:它是一个 WPF 应用程序

标签: c# entity-framework entity-framework-core


【解决方案1】:

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

事实。两个错误信息

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

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

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

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

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

optionsBuilder.UseSqlServer(
    ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString);

【讨论】:

  • 非常感谢。我读了那一点,但不幸的是,请注意足够仔细:/
猜你喜欢
  • 1970-01-01
  • 2023-02-11
  • 2016-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多