我有一个Azure函数应用程序,当我在本地PC上对其进行调试时,它不会出现任何错误并且可以正常工作,但是当我将其部署到Azure Functions网站中时,它将引发错误,表明我的实体连接未指定ProviderName。
我遵循了Missing ProviderName when debugging AzureFunction as well as deploying azure function给出的解决方案,我创建了一个myDBContextConfig并将其从我的.edmx添加到自动生成的dbContext文件中,但是在部署之后,我仍然遇到同样的问题。
以下是一些我正在使用的屏幕截图和配置数据:
local.settings.json:
{ "IsEncrypted": false,
"Values": {
//Some Values
},
"ConnectionStrings": {
"Entities": {
"ConnectionString": "metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string='data source=ES-HHASQL01\\SQLES;initial catalog=Entities;persist security info=True;Integrated Security=False;User ID=****;Password=****;MultipleActiveResultSets=True;application name=EntityFramework'",
"ProviderName": "System.Data.EntityClient"
}
}
}
Azure函数连接字符串:
隐藏的连接遵循以下引用文字的样式。
metadata = res:///Models.myDB.csdl | res:///Models.myDB.ssdl | res://*/Models.myDB.msl; provider = System.Data.SqlClient; provider连接字符串='数据源= [yourdbURL];初始目录= myDB;持久安全信息= True;用户ID = xxxx;密码= xxx; MultipleActiveResultSets = True; App = EntityFramework
如果有人可以帮助我,我将非常感谢。谢谢。
编辑:
我已经使用@Joey Cai提供的代码测试了该问题,并进行了以下更改:
新的“应用设置”连接字符串如下:
数据源= tcp: *。database.windows.net,1433;初始目录= *** MultipleActiveResultSets = true;用户ID = * ;密码= ***;连接超时= 30 ; App = EntityFramework;
我将数据库配置类添加到从dbContext自动生成的代码中,如下所示:
[DbConfigurationType(typeof(EntitiesConfig))]
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
}
并创建了由以下人员指定的课程:@Joey Cai
namespace SameHasDbContext
{
public class EntitiesConfig : DbConfiguration
{
public EntitiesConfig()
{
SetProviderServices("System.Data.EntityClient", SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}
}
但是知道只有在连接类型为SQLServer或SQLAzure的情况下,运行azure函数时才会出现此错误,如果将其设置为“自定义”,它仍会显示以前显示的ProviderNamer错误:
答案 0 :(得分:0)
您无法在Azure Functions中添加有关连接的EF元数据,因为它们不使用在其中指定它的app.config。这不是连接字符串的一部分,而是与连接有关的元数据,除了EF用来映射到特定C#类和SQL Provider等的连接字符串之外。为避免这种情况,您可以遵循以下代码。
[DbConfigurationType(typeof(DBContextConfig))]
partial class
{
public Entities(string connectionString)
: base(connectionString)
{
}
}
public class DBContextConfig : DbConfiguration
{
public DBContextConfig()
{
SetProviderServices("System.Data.EntityClient", SqlProviderServices.Instance);
SetDefaultConnectionFactory(new SqlConnectionFactory());
}
}