Windows Azure,实体框架。关键字不受支持:'metadata'。

7
这个问题已经被问了几次,但是我无法使任何建议对我起作用。 我有一个本地构建的网站和SQL数据库,现在已经部署到Azure。数据库是网站的链接资源。我能够浏览网站,甚至可以使用ADO.Net和标准连接字符串连接并运行对数据库的查询。 问题是当我尝试使用Entity Framework连接时,我总是收到“关键字不受支持:'metadata'”的错误提示。我已经删除了多个活动记录集,并尝试使用'的替换",但都没有成功。我完全卡住了。

你可以发布完整的连接字符串(省略服务器名称和密码),以及你正在使用的EF版本和方法(即CodeFirst,ModelFirst,DatabaseFirst)。然后提供错误的确切堆栈跟踪信息。自2年前起,MARS不是SQL Azure的问题。 - astaykov
抱歉,我经常在凌晨3点忘记事情。我已经准备好粘贴了。我通过将“”替换为'并将连接类型更改为自定义来解决了这个问题,如下所述。 - Jason Murray
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
26

以下是我在Azure门户中定义的连接字符串,用于DatabaseFirst方法:

metadata=res://*/mySuperModel.csdl|res://*/mySuperModelModel.ssdl|res://*/mySuperModel.msl;provider=System.Data.SqlClient;provider connection string="Data Source=tcp:myServerName.database.windows.net,1433;Initial Catalog=myDatabaseName;User ID=myUserName@myServerName;Password=myPasswordHere;"

请将您的连接方式与Azure门户中注意到连接类型为“自定义”进行比较。


请注意,我的连接字符串中没有激活MARS,但这是因为我使用的是SQL Azure联邦(不支持MARS)。对于常规的SQL Azure连接,您可以安全地激活它。 - JYL
谢谢。我的问题是连接类型没有改变。将其设置为自定义即可解决。 - Jason Murray
1
这个可行 - 谢谢!! 请注意大家--前往Azure > 应用程序服务器,应用程序设置...我必须从列出的连接字符串中删除起始"和结束"! 非常容易忽略那个非常微小的细节。您在上面的示例中看不到它,因为它不应该存在。 再次感谢! - Neville
我在所有这些中缺少的主要部分是:User ID=myUserName@myServerName;...一旦我添加了@myServerName部分,它就可以工作了。 - fujiiface
在设置Azure App Service上的连接字符串并从web.config中复制格式时,还有一点很重要 - 您需要将"替换为",转义引号在web.config中是显而易见的(因为xml),但在Azure app service上不能存在。 - undefined

2
我和问题提出者遇到了同样的问题,但他的解决方法对我没有用。 这是一个连接字符串的问题,但不是引号的问题。 由于我花了两天时间才解决,也许这会帮助其他人: 当我的ASP.NET MVC 4.5/Entity Framework 5.0应用程序在Azure上托管时(我在本地使用SQL Server 2012进行开发,但将数据库迁移到Azure SQL Database(使用SQL数据库迁移向导)),以下连接字符串可行。我使用数据库优先创建我的.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"/>
“UPPERCASE” 中的文本是我的 Azure 信息。显然,您需要使用自己的信息。

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

res://*/Models.MyProjectModel.csdl|res://*/Models.MyProjectModel.ssdl|res://*/Models.MyProjectModel.msl
那些参考资料必须完全正确。让我重复一遍:那些参考资料必须完全正确!!阅读2008年的这篇文章(“故障排除实体框架连接字符串”),我使用.NET Reflector查看了MyProjectModel.dll(我的.dll名称,可能与您的项目不同),就像他建议的那样,确实发现由实体框架自动生成的连接字符串是错误的。它没有包括前缀。当我添加了Models.前缀(这是我的.dll内部命名.csdl/.msl/.ssdl的方式,可能在您的项目中不同)时,一切都很好。查看您的.dll并查看名称是否匹配。如果不匹配,请更改为与.dll中显示的内容相匹配的名称。(如果我说的不够清楚,请阅读上面的文章。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,