正在ASP.NET 5/EF 6中获取数据库连接字符串



我有一个包含两个项目的解决方案:ASP.NET5Web项目和带有EF6的类库。在旧的ASP.NET 4世界中,我有一个带有构造函数的DbContext类:

public MyModel() : base("name=MyModel") {    }

然后在web应用程序中,我在web.config中有一个连接字符串。我还有一个DefaultConnection值,用于基于成员身份的标识。

现在我正在尝试使用ASP.NET 5。默认连接字符串以"新"的方式工作(我从零开始标识,最终无论如何都不会使用基于数据库的身份验证)-我正在正确地进行身份验证。默认连接字符串在appsettings.json中。但是,无论我尝试了什么,我都会收到一个错误No connection string named 'MyModel' could be found in the application config file。我试着按照这里的建议将name=MyModel更改为name=Data:AAOModel:ConnectionString,但新值仍然出现了相同的异常。

appsettings.json的相关部分是这样的(我意识到我可以拆分为config.json,但这没有任何区别):

"Data": {
"DefaultConnection": {
  "ConnectionString": "Server=(localdb)\MSSQLLocalDB;Database=..."
},
"MyModel": {
  "ConnectionString": "Server=dbserver;Database=BusinessDB..."
}

}

我还尝试在Startup中使用ConfigureServices(),就像在脚手架代码中添加IdentityContext一样,如下所述。然而,我注意到IdentityContext是从Microsoft.Data.Entity派生的,但我的MyModel是从System.Data.Entity和服务派生的。AddDbContext<>()不喜欢。

在这个时候,我觉得我尝试了谷歌能买到的所有排列。将ASP.NET 5与EF6类库一起使用的正确方法是什么?

我尝试了@Ryan的#2方法,它在一定程度上起了作用,但通过传递连接字符串(或SqlConnection对象)实例化DbContext会告诉EF创建代码优先上下文,在我的情况下,EDMX的类与代码优先不兼容。EDMX的类(poco,如果你愿意的话)必须是代码优先友好的,否则就无法工作。

我的解决方案是简单地在web项目中添加App.config文件。

我不喜欢这种变通方法,但当你必须使用EF 6和ASP.NET 5 web项目时,你必须做你该做的。

应用程序配置

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="SomethingEntities" connectionString="metadata=res://*/Entities.Something.Entities.csdl|res://*/Entities.Something.Entities.ssdl|res://*/Entities.Something.Entities.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Db_Local;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

您有几个相当简单的选项:

1:开始使用实体框架7。

  • 它的发布时间表是与Asp.net 5协调安排的,尽管有些功能可能会缺失一段时间
  • 然后,您可以使用AddDbContext,就像您已经尝试过的那样

2:您可以在创建上下文时将整个连接字符串传递给构造函数/库,使用Asp.net配置从json-config中提取值。

public MyModel(string connectionString) : base(connectionString) { }

  • EF6中的基本上下文需要连接字符串的名称(在配置中查找)或实际连接字符串本身

我发现的最简单的方法就是在web.config中添加一个带有连接字符串的键,该连接字符串可以通过ConfigurationManager访问。

 <add key="ConnectionString" value="..." />
System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString());

最新更新