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

时间:2015-12-31 04:02:38

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

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

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

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

现在我试图进入ASP.NET 5.默认连接字符串在" new"方式(我从头开始身份,最终我不会使用基于DB的身份验证) - 我正在进行正确的身份验证。默认连接字符串位于appsettings.json中。但是,无论我尝试了什么,我都会收到错误No connection string named 'MyModel' could be found in the application config file。我尝试按照建议herename=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的方式,如here所述。但是,我注意到IdentityContext派生自Microsoft.Data.Entity但我的MyModel派生自System.Data.Entity,而services.AddDbContext<>()并不喜欢它。

此时我觉得我尝试了谷歌可以购买的所有排列。将ASP.NET 5与EF6类库一起使用的正确方法是什么?

3 个答案:

答案 0 :(得分:2)

我尝试了@ Ryan的#2方法并且它有点工作,但通过传递连接字符串(或DbContext对象)来实例化SqlConnection将告诉EF创建Code First上下文,在我的情况下, EDMX的类不兼容Code First。 EDMX的课程(poco,如果你愿意的话)必须是Code First友好的,否则将无效。

我的解决方案是在网络项目中添加App.config文件。

我不喜欢这种解决方法,但是当你必须使用EF 6和ASP.NET 5 web项目时,你必须做你必须做的事情。

<强>的App.config

<?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 :(得分:0)

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

1:开始使用Entity Framework 7.

  • 它的发布时间表是与Asp.net 5协调的,有些功能可能会暂时丢失,但
  • 然后,您将使用AddDbContext,因为您已经尝试了

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

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

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

答案 2 :(得分:0)

我找到的最简单的方法是在web.config中添加一个带有连接字符串的密钥,该字符串可以通过ConfigurationManager进行访问。

 <add key="ConnectionString" value="..." />

System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString());