关键字不支持:'server'

34

我一直在尝试编辑我的连接字符串,以便将我的网站上传到服务器上。
我对此并不是很有经验。我收到了这个异常:the Keyword not supported: 'server'。
这是我的连接字符串:

<add name="AlBayanEntities" connectionString="Server=xx.xx.xxx.xxx,xxxx;Database=AlBayan;Uid=bayan;Password=xxxxx;" providerName="System.Data.EntityClient" />

我尝试将这个字符串嵌入到我旧的连接字符串中,本地运行得非常好,但它不适用:S


你没有说你要连接的数据库管理系统是哪个。 - ErikE
marc_s\ 是的,它不像在创建EDMX之后的连接字符串,但这是我的问题,我该如何编辑它 :$ - Evanescence
9个回答

41

对于Entity Framework(数据库优先或模型优先;当您拥有物理EDMX模型文件时),您需要使用一种特殊类型的连接字符串,它与到目前为止其他人提到的直接ADO.NET连接字符串非常不同...

连接字符串必须类似于:

<add name="testEntities" 
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(local);initial catalog=test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 
     providerName="System.Data.EntityClient" />

在这个连接字符串中,你会发现 provider connection string= 属性,它基本上就是你的 ADO.NET 连接字符串:

provider connection string=&quot;data source=(local);initial catalog=test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" 

所以在这里,你需要更改服务器名称和可能的其他设置。

  • data source=....表示你的服务器(你也可以使用server=.....
  • initial catalog=.....表示你的数据库(你也可以使用database=....

@marc_s 你从哪里获取第一个连接字符串的? - Mohit Shah
@MohitShah - 这里的UDL技巧对我很有用。我采用了Filburt生成的代码片段,并将其拼接到上面,它就像魔法一样奏效了。https://dev59.com/o2kv5IYBdhLWcg3wnB87#10480011 - BoredBsee

17

在使用 MVC5EntityFramework 6.xxCode First Approach 的情况下,

我遇到了同样的问题,并通过修改我的 providerName 来解决它。

修改前:

 providerName="System.Data.EntityClient"

providerName="System.Data.SqlClient"

7

当您将连接字符串存储在应用服务本身(位于“应用程序设置”中)时,在 Azure 网站上会抛出此异常。

如果连接字符串是实体框架连接字符串,则默认情况下,引号会在您的 web.config 文件中编码为 &quot;

您需要将这些编码后的引号更改回实际引号,以便可以正确解析连接字符串。


1
这真是救命之恩。非常感谢你。 - Borbea
实际上,使用双引号或单引号代替XML转义字符是可行的。 - Andrii

3

我总是运行连接向导来构建我的字符串,或者我使用connectionstrings.com

假设是SQL Server:

Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;

与你的相比,它非常不同。
Server=xx.xx.xxx.xxx,xxxx;Database=AlBayan;Uid=bayan;Password=xxxxx;

是的,但再说一遍:这不是 EF 的有效连接字符串! - marc_s
谢谢,马克。我以为原帖的作者可以在网站上找到他所需的内容。 - ErikE
那个网站展示了直接的 ADO.NET 连接字符串 - 就像你所做的一样 - 但是不幸的是没有任何 Entity Framework 的连接字符串。 - marc_s
1
@marc,我已经给他们发送了一封电子邮件,请求他们包含Entity Framework。 - ErikE
2023(12年后!)-- Server=xx.xx.xxx.xxx,xxxx;Database=AlBayan;Uid=bayan;Password=xxxxx; 现在是在connectionstrings.com上显示的第一个。 - Jan 'splite' K.

3
当我在使用Rider IDE处理一个.net core 2.2项目时,发生了同样的情况。 由于Rider自动在Startup.cs中的“ConfigureServices”方法中设置Sqlite,因此出现了这种情况。
通过更改

services.AddDbContext<ApplicationDbContext>(options =>
    options.**UseSqlite**(
        Configuration.GetConnectionString("DefaultConnection")));

转换为

services.AddDbContext<ApplicationDbContext>(options =>
    options.**UseSqlServer**(
        Configuration.GetConnectionString("DefaultConnection")));

问题已解决。 当然,首先您需要安装EF SQLServer的NuGet包,并将连接字符串添加到appsettings.json中。

1

试试这个

<add name="AlBayanEntities" connectionString="Data Source=xx.xx.xxx.xxx,xxxx;Initial Catalog=AlBayan;User Id=bayan;Password=1abcd;" providerName="System.Data.EntityClient" />

2
它抛出另一个异常:关键字不受支持:'data source'。:$ - Evanescence
1
请查看此链接,可能会有所帮助 https://dev59.com/PUfRa4cB1Zd3GeqP5gn8 - Saanch

0
在我的情况下,我发现我的项目安装了EFSQLLite NuGet包,它似乎无法识别Server=关键字。 我卸载了那个NuGet并安装了完整的EFSQLSERVER,然后它就正常工作了。

0
EntityConnectionStringBuilder bb = new EntityConnectionStringBuilder();
bb.Metadata = "res://*/dao.bdmi.csdl|res://*/dao.bdmi.ssdl|res://*/dao.bdmi.msl";

//same as below client tobe used
bb.Provider = "MySql.Data.MySqlClient";
MySql.Data.MySqlClient.MySqlConnectionStringBuilder mbb = new MySql.Data.MySqlClient.MySqlConnectionStringBuilder();
mbb.Server = "";
mbb.Database = "";
mbb.UserID = "";
mbb.Password = "";
mbb.PersistSecurityInfo = true;


//use providerconnectionstring insted of connectionstring
bb.ProviderConnectionString = mbb.ToString();
return bb.ToString();

通过这种方式,您可以根据需要更改ConnectionString


0
如果你将数据库从Sqlite更改为SqlServer,可能会遇到这个错误。
将你的连接从...更改。
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlite(connectionString));

to

builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));


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