【问题标题】:Entity Framework 6: "No connection string could be found in the application config file." when referencing .net framework dll in asp.net core app实体框架 6:“在应用程序配置文件中找不到连接字符串。”在 asp.net 核心应用程序中引用 .net 框架 dll 时
【发布时间】:2019-11-05 14:47:19
【问题描述】:

我正在将 ASP.NET MVC 应用程序移植到 .NET Core。

其中一个应用程序依赖项是使用 Entity Framework 6 的 .NET Framework dll。 我添加了旧 ASP.NET MVC 应用程序中的设置并引用了 System.Configuration.ConfigurationManager 以在新应用程序中使用旧设置文件格式。

当我运行应用程序时出现错误:

在应用程序配置文件中找不到名为“myEntity”的连接字符串。

如何将连接字符串添加到我的新 .NET Core 应用?

【问题讨论】:

  • 需要在settings.json文件中添加连接字符串。在 DB Context Constructor 中传递连接字符串
  • 我的 dbContext 的构造函数没有接收参数。如果我更改它然后更新 edmx 文件,它将再次自动生成它并删除对构造函数所做的更改
  • 检查我的答案我向您展示如何修改您的 t4 模板以在基本构造函数中传递连接字符串

标签: asp.net .net-core entity-framework-6


【解决方案1】:

像这样将连接字符串添加到 appsettings.json:

"Data": {        
    "DB": "metadata=res://*/AppDB.csdl|res://*/AppDB.ssdl|res://*/AppDB.msl;provider=System.Data.SqlClient;provider connection string='Your Connection String Goes Here'",       
  },

像这样读取你的连接字符串:

IConfiguration["Data:DB"]

有关如何执行此操作的更多信息:ASP.NET Core Configuration

然后在 DBContext 的构造函数中传递连接字符串。

这就是我在我的一个应用程序中使用相同场景的方式。

您需要在具有 EDMX 文件的项目中修改您的 T4 模板 (NameOfModel.Context.tt):

将此行添加到构造函数中:

: base(ConfigHelper.GetConnectionString("<#=container.Name#>"))

其中 ConfigHelper.GetConnectionString 是一个静态类,具有从 appsettings.json 读取配置的方法,如前所述。

【讨论】:

  • 正如我之前所说,我的 DbContext 构造函数不接收任何参数。它使用连接字符串的名称调用基本构造函数Context():base("name="MyEntity"){}
  • 您将不得不更改 t4 模板。我向你展示了如何
  • Context 构造函数位于 .Net 框架 dll 中,而配置位于另一个项目中。 ConfigHelper 如何读取配置? .net 核心项目依赖于 .net 框架项目
  • 您需要使用 ConfigHelper 类创建一个 DLL。在 .NET Core 中的依赖项被注入。所以你应该使用依赖注入来分配来自 ASP.NET Core 配置的 IConfiguration。
  • ASP.NET Core 与其他版本的 .NET 非常不同。您将不得不忘记“传统”的 .NET 做事方式。
猜你喜欢
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多