我一直在尝试编辑连接字符串以将我的网站上传到服务器。
我对此并没有真正的经验。我收到此异常:不支持关键字:“服务器”。
这是我的连接字符串:
<add name="AlBayanEntities" connectionString="Server=xx.xx.xxx.xxx,xxxx;Database=AlBayan;Uid=bayan;Password=xxxxx;" providerName="System.Data.EntityClient" />
我尝试将此字符串嵌入到我的旧连接字符串中,该字符串在本地运行良好,但它不适合:S
对于实体框架(数据库优先或模型优先;当您有物理 EDMX 模型文件时),您需要使用特殊类型的连接字符串,它与到目前为止其他人提到的直接 ADO.NET 连接字符串有很大不同...
连接字符串必须类似于:
<add name="testEntities"
connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=(local);initial catalog=test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
在此连接字符串中,您将找到
provider connection string=
属性,它基本上是您的 ADO.NET 连接字符串:
provider connection string="data source=(local);initial catalog=test;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""
所以在这里,您需要更改服务器名称和可能的其他设置。
data source=....
代表您的服务器(您也可以使用server=.....
)initial catalog=.....
代表您的数据库(您也可以使用database=....
)在 MVC5 中使用 EntityFramework 6.xx 和 代码优先方法
我遇到了同样的问题,我通过修改我的
providerName
解决了这个问题
来自
providerName="System.Data.EntityClient"
到
providerName="System.Data.SqlClient"
当您将连接字符串存储在应用服务本身中(在“应用程序设置”边栏选项卡上)时,Azure 网站上会引发此异常。
如果连接字符串是实体框架连接字符串,则引号将在 web.config 文件中默认编码为
"
。
您需要将这些更改回实际引号,以便可以正确解析连接字符串。
在使用 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 中。
我总是运行连接向导来构建我的字符串,或者使用 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;
试试这个
<add name="AlBayanEntities" connectionString="Data Source=xx.xx.xxx.xxx,xxxx;Initial Catalog=AlBayan;User Id=bayan;Password=1abcd;" providerName="System.Data.EntityClient" />
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
。
就我而言,我发现我的项目安装了 EFSQLLite nuget 包,它似乎无法识别
Server=
关键字。
我卸载了那个 nuget 并安装了完整的 EFSQLSERVER,它工作得很好
如果您将数据库从 Sqlite 更改为 SqlServer。您可能会遇到此错误。
更改您的连接
builder.Services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlite(connectionString));
到
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));