JQuery Mobile
JQuery Mobile

Reputation: 6291

Set Entity Framework Connection String at Runtime in C#

I need to set my Entity Framework connection string at runtime. Right now, I have the following:

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();
}

When I execute the code above (with the {parameter} values replaced), I get the following error:

Keyword not supported: 'data source'.

What am I doing wrong?

Upvotes: 20

Views: 37115

Answers (4)

Vijay Sutaria
Vijay Sutaria

Reputation: 132

set multiple connection strings in your web.config, and follow below:

public partial class MyDatabaseEntities
{
    public MyDatabaseEntities(string connection)
        : base(connection)
    {
    }
}

and then wherever you want to create instance of entities, pass connection string name in parameter:

MyDatabaseEntities entities = new MyDatabaseEntities("CONNECTION_STRING_NAME");

I hope this will help.

Thanks

Upvotes: 3

Bedouin
Bedouin

Reputation: 490

It is easier to use EntityConnectionStringBuilder and SqlConnectionStringBuilder to change parameters as you want.

Upvotes: 6

Mukus
Mukus

Reputation: 5033

I know this was asked 10 months ago, but I found an easier way to specify the connectionString:

If your config file has it as:

<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" />

You can specify it as -

public const string ConnectionString = @"name=CustomerDataModel";
..
CustomerDBContext context = new CustomerDBContext(ConnectionString );

No need to worry about quotes. Lot cleaner.

Upvotes: 7

scartag
scartag

Reputation: 17680

Change this.

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

To this (note how i escaped the " character as "" )

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""";

Upvotes: 21

Related Questions