【发布时间】:2019-04-03 21:32:18
【问题描述】:
我在获取DbContext 以正确从我的local.settings.json 中提取我的连接字符串时遇到问题
上下文:
- 这是一个 Azure 函数项目
- 主要问题代码在
System.Data.Entity.Internal.AppConfig - 虽然我有一个
local.settings.json文件,但这不是dotnet 核心。它是 .net 4.6.1
错误信息:
'应用程序配置文件中的连接字符串'ShipBob_DevEntities'不包含所需的providerName属性。''
Json 配置:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"AzureWebJobsDashboard": ""
},
"ConnectionStrings": {
"ShipBob_DevEntities": {
"ConnectionString": "metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=***;initial catalog=***;persist security info=True;User Id=***;Password=***;;multipleactiveresultsets=True;application name=EntityFramework'",
"providerName": "System.Data.EntityClient"
}
}
}
测试的配置版本:
- 将提供程序名称移动到实际的
ConnectionString令牌值中:同样的错误发生 - 将
ConnectionString属性内的provider属性设置为EntityClient:这没有任何作用 -
将
ShipBob_DevEntities设为字符串值 =ConnectionString的值:这会引发新的错误,例如不支持关键字元数据
我尝试使用 ADO 连接字符串,它会引发
code first异常,当您的连接字符串在database first方法中不正确时,该异常似乎会发生。
我冒昧地使用 dotPeek 对 EntityFramework.dll 进行了反编译,并将问题追溯到 System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig。在这个方法中,有一个对LazyInternalConnection.FindConnectionInConfig 的调用,它会吐出一个ConnectionStringSettings 对象,它的ProviderName 值设置为null。不幸的是,我无法调试它似乎用来生成这个值的AppConfig.cs 类,所以我被卡住了。
到目前为止,我已经查阅了这两篇文章。其中一种状态是将提供者名称作为它自己的令牌;但是,这不起作用。
https://github.com/Azure/azure-functions-cli/issues/193
https://github.com/Azure/azure-functions-cli/issues/46
有人知道在 local.settings.json 中用于实体框架连接的正确格式吗?
【问题讨论】:
标签: c# entity-framework azure azure-functions