Entity Framework Code First Azure 连接

6

我正在使用Entity Framework Code First 4.3+Azure,连接数据库遇到了困难。我在第一次查询时遇到了以下错误:

Keyword not supported: 'server'.

我在Web.config文件中设置了以下连接:
<configSections>
    type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <connectionStrings>
    <add name="TestDBContext"
         connectionString="Server=tcp:[SUBSCR].database.windows.net,1433;Database=[MyDB];User ID=[user];Password=[pass];Trusted_Connection=False;Encrypt=True;PersistSecurityInfo=True"
         providerName="System.Data.EntityClient" />
  </connectionStrings>

我的DbContext实现类使用连接字符串的名称:

public class MyContext : DbContext, IMyContext
    {
        public MyContext()
            : base("TestDBContext")
        {
            Configuration.LazyLoadingEnabled = true;
            Configuration.ProxyCreationEnabled = true;
        }

你能告诉我发生了什么吗?
6个回答

5

我刚遇到了同样的问题。

你缺少Entity Framework所需的连接字符串中的所有元数据。 SQL Azure提供的连接字符串需要插入到EF连接字符串的provider connection string参数中。

<add name="MyConnectionString" connectionString="metadata=res://*/Model.Model.csdl|res://*/Model.Model.ssdl|res://*/Model.Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;[在此处放置SQL AZURE CONN STRING]&quot;" providerName="System.Data.EntityClient" />

您需要使用自己项目中的元数据。我从一个生成自现有数据库的EF项目中获取了该元数据。


1
我正在使用EF Code First + DbContext(我不是从数据库生成数据模型),因此在开发时我没有任何元数据可用。 - Stefan Szasz
7
如果您正在使用Code First,那么您的连接字符串提供程序应该是 System.Data.SqlClient 而不是 System.Data.EntityClient - ryanmcdonnell

2

提供程序应为providerName="System.Data.SqlClient"

我从VS连接到Azure,然后查看属性并设置了我的连接字符串和提供程序名称。

 <add name="context" connectionString="Data Source=myServer,myPort;Initial Catalog=myDBName;Persist Security Info=True;User ID=myUserName;Password=myPassword;" providerName="System.Data.SqlClient"/>

我随后能够无问题地运行update-database。


2

我有同样的问题。我解决了,在web.config中添加了这个connectionstring:

<add name="eManagerTurModelConnection" connectionString="metadata=res://*/ORM.eManagerFinanceModel.csdl|res://*/ORM.eManagerFinanceModel.ssdl|res://*/ORM.eManagerFinanceModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=<server>.database.windows.net;Initial Catalog=eManagerTur;Integrated Security=False;User ID=<user>;Password=<Password>;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

在我删除网站的连接字符串后,它能正常工作了,因为它没有获取我在web.config中添加的连接字符串。

我的英语不好... =)


0

我尝试了这样做,可能会对你有帮助。也许是1433端口出了问题?或者其他什么原因?试试这个方法。

查看这个链接Windows Azure with Sql

<add name="dbContext" connectionString="Server=tcp:xxxxxxxx.database.windows.net;Database=xxxxxxxx;User ID=xxxxxxx@xxxxxxxxx;Password=xxxxxxxxxx;Trusted_Connection=False;Encrypt=True;" providerName="System.Data.EntityClient" />

尝试过了,不起作用... 1433是SQL Server的默认端口,我从我的Azure订阅/数据库中复制粘贴了连接字符串。 - Stefan Szasz

0

关键字不受支持:'数据源'。 - Stefan Szasz

-1

我曾经遇到过类似的问题,即无法访问元数据。在这种情况下,您需要使用 System.Data.SqlClient 作为提供程序。您还需要将 MultipleActiveResultSets=True 添加到连接字符串中。


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