【问题标题】:Windows Azure, Entity Framework. Keyword not supported: 'metadata'.Windows Azure,实体框架。不支持关键字:“元数据”。
【发布时间】:2012-12-17 04:40:41
【问题描述】:

这已被问过几次,但我无法让任何建议对我有用。

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

问题是当我尝试使用实体框架进行连接时,我不断收到 Keyword not supported: 'metadata'。 我已经删除了多个活动记录集并尝试将 " 替换为 ' 但它没有行不通。我完全被想法困住了。

【问题讨论】:

  • 您能否发布您的完整连接字符串(省略服务器名称和密码)和您正在使用的 EF 版本,以及您正在使用的方法(即 CodeFirst、ModelFirst、DatabaseFirst)。然后是错误的精确堆栈跟踪。至少 2 年以来,MARS 对 SQL Azure 没有问题。
  • 对不起。我倾向于在凌晨 3 点忘记事情。我也准备好粘贴了。我能够通过替换“”来解决这个问题使用 ' 并将连接类型更改为自定义,如下所述。

标签: sql-server azure entity-framework-5


【解决方案1】:

这是我在 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 连接,您可以安全地激活它。
  • 谢谢。我的问题是连接类型没有改变。将此设置为自定义排序。
  • 这行得通-谢谢!请大家注意——转到 Azure > App Server, App Settings ...我必须从列出的连接字符串中删除开始“和结束”!很容易错过那个非常微小的细节。您在上面的示例中看不到它,因为它不应该存在。再次感谢!
  • 我在这一切中缺少的主要部分:User ID=myUserName@myServerName;...一旦我添加了@myServerName 部分,它就起作用了。
【解决方案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。(如果我说的不够清楚,请阅读上面的文章。)

【讨论】:

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