【问题标题】:Keyword not supported: 'metadata' error in Azure function不支持关键字:Azure 函数中的“元数据”错误
【发布时间】:2025-12-19 17:20:09
【问题描述】:

我在 Azure 函数中遇到了上述错误。当我尝试使用 Azure 函数中的 Entity Framework 与我的数据库建立连接时。

我阅读了一些建议将 Connection Type 从“SQL Server”更改为“Custom”的帖子,但在这样做之后,我得到 应用程序的配置文件不包含所需的 providerName 属性. 错误。

现在我尝试了很多方法来解决这个问题,但还没有成功。

这是我的连接字符串 -

metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string='data source=*******;initial catalog=****;persist security info=True;user id=****;password=*******;MultipleActiveResultSets=True;App=EntityFramework

请帮忙。

【问题讨论】:

    标签: entity-framework azure azure-functions


    【解决方案1】:

    您可能已经解决了您的问题,但我今天遇到了同样的问题。我解决了如下。

    • 为 EF 模型创建了一个单独的项目。
    • 添加以下代码来扩展实体类

      [DbConfigurationType(typeof(DBContextConfig))]
      partial class <Entities Class Name>
      {
      
          public Entities(string connectionString)
            : base(connectionString)
          {
          }
      }
      
      public class DBContextConfig : DbConfiguration
      {
          public DBContextConfig()
          {
              SetProviderServices("System.Data.EntityClient", SqlProviderServices.Instance);
              SetDefaultConnectionFactory(new SqlConnectionFactory());
          }
      }
      
    • Azure Function 项目中的参考项目。
    • 将连接字符串添加到 Azure 门户中的应用程序设置,并将连接类型设置为自定义。

    【讨论】:

      【解决方案2】:

      您可以查看您身边的official EF connection string
      我想您的问题与 Azure 门户连接字符串和 web.config 连接字符串之间的冲突有关。并且我们不能在门户的连接字符串中定义 providerName 属性。

      您可以通过此article 了解有关冲突连接字符串的更多信息。

      门户没有接受 providerName 属性的能力。因此,您需要在 web.config 中保留连接字符串,它指定名称和 providerName,但只需为连接字符串输入一个虚拟值。现在将该连接字符串值放入门户连接字符串中。当它运行时,它会从 web.config 中获取 providerName,然后用你在 Azure 门户应用程序设置 [Connection Strings] 中输入的连接字符串值覆盖 web.config 中的虚拟连接字符串。

      这个article有一个解决方案。

      尝试使用本地或虚拟连接字符串进行发布,并像在 Azure 应用程序设置中那样覆盖它。

      【讨论】:

      • @SharadG 嗨,我已经更新了我的答案。希望对你有帮助!
      【解决方案3】:

      我通过使用参数化构造函数(连接字符串作为参数)覆盖自动生成的实体类来解决这个问题。

      【讨论】: