我的代码在本地工作,连接字符串指向AZURE SQL SERVER。但是,只要我发布到Azure Web站点,每个使用EF模型的View都会抛出此错误。 我已将“to”更改为提议的解决方案之一,没有任何作用。 我卡住了!!
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)
答案 0 :(得分:2)
如果您的连接字符串中有 MultipleActiveResultSets = True ,请删除,并且相同的连接字符串应在Windows Azure中有效。我发现这是你情况中最常见的错误。
如果不是这样,请发布你的连接字符串,我会看看。
答案 1 :(得分:2)
我遇到与OP相同的问题,但他的解决方案对我不起作用。
这是一个连接字符串问题,但没有引号。
由于我花了两天时间才解决,也许这会帮助其他人:
在Azure上托管时, [用于我的ASP.NET MVC 4.5 / Entity Framework 5.0应用程序的连接字符串(我在本地针对SQL Server 2012开发,但将数据库迁移到Azure SQL数据库)(使用{{ 3}}))。我首先使用数据库来创建我的.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="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"" providerName="System.Data.EntityClient"/>
UPPERCASE中的文本是我的Azure信息。显然,你需要使用自己的。
这部分连接字符串给了我噩梦,也可能导致你的问题:
res://*/Models.MyProjectModel.csdl|res://*/Models.MyProjectModel.ssdl|res://*/Models.MyProjectModel.msl
这些引用必须完全正确。让我再说一遍:那些引用必须完全正确!!
在阅读SQL Database Migration Wizard(“实体框架连接字符串疑难解答”)后,我使用.NET Reflector查看MyProjectModel.dll(我的.dll的名称(可能与您的项目不同),如他所建议的那样) ,果然,连接字符串(由Entity Framework自动为我生成!)是错误的。它没有包含前缀。一旦我添加了模型。前缀(这是怎么回事.csdl / .msl / .ssdl在我的.dll中命名(可能与你的不同)),一切都很好。看看你的.dll内部是否匹配。如果没有,改变它们以匹配什么出现在.dll中。(如果我说的不够清楚,请阅读上面的文章。)
答案 2 :(得分:1)
答案 3 :(得分:0)
这是我对另一个可能有用的SO线程的回答。我在其中提到的步骤包括Azure上的连接字符串的端到端配置并动态使用它。是的,它修复了有问题的错误!
https://stackoverflow.com/a/37938912/3785895
更多信息:除了更改providerName之外,还有一些我们可能需要检查的额外位。在发布API App / Web App之后,Azure似乎正在更新web.config文件。