我有一个包含两个项目的解决方案: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
。我尝试按照建议here将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的方式,如here所述。但是,我注意到IdentityContext派生自Microsoft.Data.Entity
但我的MyModel派生自System.Data.Entity,而services.AddDbContext<>()并不喜欢它。
此时我觉得我尝试了谷歌可以购买的所有排列。将ASP.NET 5与EF6类库一起使用的正确方法是什么?
答案 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="data source=.\;initial catalog=Db_Local;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
答案 1 :(得分:0)
您有几个相当简单的选择:
1:开始使用Entity Framework 7.
2:您可以在创建上下文时将整个连接字符串传递给构造函数/ base,使用Asp.net配置从json配置中提取值。
public MyModel(string connectionString) : base(connectionString) { }
答案 2 :(得分:0)
我找到的最简单的方法是在web.config中添加一个带有连接字符串的密钥,该字符串可以通过ConfigurationManager进行访问。
<add key="ConnectionString" value="..." />
System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString());