在C#中运行时设置实体框架连接字符串

JQu*_*ile 20 c# entity-framework

我需要在运行时设置我的Entity Framework连接字符串.现在,我有以下内容:

string connectionString = "metadata=res://*/DataModels.CustomerDataModel.csdl|res://*/DataModels.CustomerDataModel.ssdl|res://*/DataModels.CustomerDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=tcp:{serverName},{portNumber};initial catalog={databaseName};user id={username};multipleactiveresultsets=True;application name=EntityFramework"";
using (CustomerEntities entities = new CustomerEntities(connectionString))
{
  CustomerEntity entity = new CustomerEntity();
  // do more
  entities.CustomerEntities.Add(entity);
  entities.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

当我执行上面的代码(替换{parameter}值)时,我收到以下错误:

不支持关键字:'数据源'.

我究竟做错了什么?

sca*_*tag 21

改变这个.

string connectionString = "metadata=res://*/DataModels.CustomerDataModel.csdl|res://*/DataModels.CustomerDataModel.ssdl|res://*/DataModels.CustomerDataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=tcp:{serverName},{portNumber};initial catalog={databaseName};user id={username};multipleactiveresultsets=True;application name=EntityFramework"";
Run Code Online (Sandbox Code Playgroud)

对此(请注意我如何逃脱"角色为")

string connectionString = @"metadata=res://*/DataModels.CustomerDataModel.csdl|res://*/DataModels.CustomerDataModel.ssdl|res://*/DataModels.CustomerDataModel.msl;provider=System.Data.SqlClient;provider connection string= ""data source=tcp:{serverName},{portNumber};initial catalog={databaseName};user id={username};multipleactiveresultsets=True;application name=EntityFramework""";
Run Code Online (Sandbox Code Playgroud)


Muk*_*kus 8

我知道这是在10个月前提出来的,但我找到了一种更简单的方法来指定connectionString:

如果您的配置文件包含:

<connectionStrings>
<add name="CustomerDataModel" connectionString="metadata=res://*/EntityFramework.CustomerDataModel.csdl|res://*/EntityFramework.CustomerDataModel.ssdl|res://*/EntityFramework.CustomerDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\CustomerDataModel;initial catalog=CustomerDB;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
Run Code Online (Sandbox Code Playgroud)

您可以将其指定为 -

public const string ConnectionString = @"name=CustomerDataModel";
..
CustomerDBContext context = new CustomerDBContext(ConnectionString );
Run Code Online (Sandbox Code Playgroud)

无需担心报价.很多清洁工.


Bed*_*uin 7

使用EntityConnectionStringBuilderSqlConnectionStringBuilder更容易根据需要更改参数.