部署的Azure函数给出了ProviderName错误

时间:2019-03-14 09:40:49

标签: c# azure azure-functions

我有一个Azure函数应用程序,当我在本地PC上对其进行调试时,它不会出现任何错误并且可以正常工作,但是当我将其部署到Azure Functions网站中时,它将引发错误,表明我的实体连接未指定ProviderName。

我遵循了Missing ProviderName when debugging AzureFunction as well as deploying azure function给出的解决方案,我创建了一个myDBContextConfig并将其从我的.edmx添加到自动生成的dbContext文件中,但是在部署之后,我仍然遇到同样的问题。

以下是一些我正在使用的屏幕截图和配置数据:

错误:The Provider Name Error

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函数连接字符串:

enter image description here

隐藏的连接遵循以下引用文字的样式。

  

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错误: New Error

1 个答案:

答案 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());
    }
}