【问题标题】:Entity Framework 4.3 Windows Azure Keyword not supported: 'metadata'不支持实体框架 4.3 Windows Azure 关键字:“元数据”
【发布时间】:2023-03-07 22:26:01
【问题描述】:

我的代码在本地工作,连接字符串指向 AZURE SQL SERVER。但是,一旦我发布到 Azure 网站,每个带有 EF 模型的视图都会引发此错误。 我已将“更改为”作为建议的解决方案之一,但没有任何效果。 我卡住了!!

  System.Data.EntityException: The underlying provider failed on ConnectionString. ---> System.ArgumentException: Keyword not supported: 'metadata'.
   at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
   at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)
   at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)

【问题讨论】:

  • 请张贴连接字符串。

标签: c# asp.net-mvc entity-framework azure


【解决方案1】:

如果您的连接字符串中有 MultipleActiveResultSets=True,请删除它,并且相同的连接字符串应该可以在 Windows Azure 中使用。我发现这是您遇到的最常见的错误。

如果不是这样,请发布您的连接字符串,我会看看。

【讨论】:

  • 将其设置为 False 不起作用,但删除它解决了它!!!关于为什么会发生这种情况以及它是否与 Azure 有关的任何见解?
  • 多半是因为Windows Azure上的运行时不能正确识别而导致这个错误。它回答解决了你的问题,很高兴你能接受它。谢谢。
【解决方案2】:

我遇到了和 OP 一样的问题,但他的解决方案对我不起作用。

这是一个连接字符串问题,但不是引号。

由于我花了两天时间解决,也许这对其他人有帮助:

有效的连接字符串[适用于我在 Azure 上托管的 ASP.NET MVC 4.5/Entity Framework 5.0 应用程序(我在本地针对 SQL Server 2012 进行开发,但将数据库迁移到 Azure SQL 数据库(使用 @987654321 @))。我首先使用数据库来创建我的 .edmx 文件(我从数据库生成(数据)模型)] 是:

<add name="MYPROJECTENTITIES" connectionString="**metadata=**res://*/MODELS.MYPROJECTMODEL.csdl|res://*/MODELS.MYPROJECTMODEL.ssdl|res://*/MODELS.MYPROJECTMODEL.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=tcp:B6JD5K5EP4.database.windows.net,1433;Initial Catalog=MYPROJECT_DB;Integrated Security=False;User ID=MYPROJECT@B6JD5K5EP4;Password=MYPASSWORDABC123;**MultipleActiveResultSets=True**;Encrypt=True;TrustServerCertificate=False&quot;" providerName="System.Data.EntityClient"/>

大写的文本是我的 Azure 信息。显然,您需要改用自己的。

这部分连接字符串让我做噩梦,它也可能导致您的问题:

res://*/Models.MyProjectModel.csdl|res://*/Models.MyProjectModel.ssdl|res://*/Models.MyProjectModel.msl

这些引用必须完全正确。让我重复一遍:那些引用必须完全正确!

在阅读this article from 2008(“实体框架连接字符串疑难解答”)之后,我使用 .NET Reflector 来查看 MyProjectModel.dll(我的 .dll 的名称(在您的项目中可能不同),就像他建议的那样,当然够了,连接字符串(由实体框架自动为我生成!)是错误的。它不包含前缀。只要我添加 Models. 前缀(这就是 . csdl/.msl/.ssdl 在我的 .dll 中命名(可能与你的不同),一切都很好。看看你的 .dll 内部,看看名称是否匹配。如果不匹配,请更改它们以匹配出现的内容.dll。(如果我说的不够清楚,请阅读上面的文章。)

【讨论】:

    【解决方案3】:

    我必须在 Azure 门户中将连接字符串类型更改为自定义。

    【讨论】:

      【解决方案4】:

      这是我在另一个可能有用的 SO 线程上的回答。我在那里提到的步骤包括 Azure 上连接字符串的端到端配置并动态使用它。是的,它修复了相关错误!

      https://stackoverflow.com/a/37938912/3785895

      更多信息:除了更改 providerName 之外,我们可能还需要检查一些额外的位。发布 API 应用程序/Web 应用程序后,Azure 似乎正在更新 web.config 文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-12-26
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 2014-03-06
        相关资源
        最近更新 更多