2012-12-17 30 views
7

这已被问了几次,但我一直没有能够为我工作的任何建议。Windows Azure实体框架。不支持的关键字:'元数据'。

我有一个网站和SQL数据库,我在本地构建,现在部署到Azure中。数据库是网站的链接资源。我能够浏览网站,甚至可以使用ADO.Net和标准连接字符串连接并运行对数据库的查询。

问题是当我尝试连接使用实体框架我总是收到关键字不支持:'元数据'。我已经删除了多个活动记录集,并尝试用''替换"',但它没有工作。我完全被想法所困。

+0

您可以发布您的完整连接字符串(省略服务器名称和密码)以及您使用的EF版本,以及您使用的方法(即, CodeFirst,ModelFirst,DatabaseFirst)。然后精确的堆栈跟踪错误。至少2年以来,MARS不是SQL Azure的问题。 – astaykov

+0

对不起。我倾向于在凌晨3点忘记事情。我也准备好了粘贴。我可以通过将'"'替换为'并且通过将连接类型更改为自定义来解决此问题,如下所述。 –

回答

18

这里是在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 [email protected];Password=myPasswordHere;" 

与你和注意,连接类型是蔚蓝的门户网站“定制”比较。

+0

请注意,我没有在连接字符串中激活MARS,但这是因为我使用SQL Azure Federation(不支持MARS)。使用常规SQL Azure连接,您可以安全地激活它。 – JYL

+0

谢谢。我的问题是连接类型没有改变。将其设置为自定义排序。 –

+0

这个作品 - 谢谢你! 请注意每个人 - 转到Azure>应用服务器,应用设置...我必须从列出的连接字符串中删除开始“和结束”! 很容易错过这个非常小的细节。 你没有看到它在上面的例子,因为它不应该在那里。 再次感谢! – Neville

2

我和OP有同样的问题,但他的解决方案并不适合我。

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

既然花了两天时间来解决,也许这将帮助别人:

在Azure托管时工作[我的ASP.NET MVC 4.5 /实体框架5.0应用程序的连接字符串(我开发针对SQL Server 2012本地,但将数据库迁移到Azure SQL数据库(使用SQL Database Migration Wizard))。我使用的数据库首先创建我的.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 [email protected];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反射来看看MyProjectModel.dll(我的.dll文件的名称(在您的项目可能有所不同)一样,他暗示,并确保内部不过,连接字符串(它是由Entity Framework自动为我生成的)是错误的,它没有包含前缀,只要我添加了Models。 prefix(这就是.csdl/.msl/.ssdl在我的.dll文件里面(可能与你的不同)),一切都很顺利。看看你的.dll文件,看看它们是否匹配,如果不匹配,改变它们以匹配在.dll中出现的内容。阅读上面的文章,如果我说的不够清楚。)