2013-02-03 16 views
20

È necessario impostare la stringa di connessione di Entity Framework in fase di esecuzione. In questo momento, ho il seguente:Impostare la stringa di connessione di Entity Framework in fase di esecuzione in C#

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

Quando eseguo il codice di cui sopra (con i valori {parametro} sostituiti), ottengo il seguente errore:

Keyword not supported: 'data source'.

Che cosa sto facendo di sbagliato?

risposta

21

Cambia questo.

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

Per questo (notare come sono scappato il "personaggio come '')

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

So che questo è stato chiesto 10 mesi fa, ma ho trovato un modo più semplice per specificare il connectionString:

Se il file di configurazione ha come:

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

È possibile specificare come -

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

Non c'è bisogno di preoccuparsi di citazioni. Lotto più pulito.

2

impostare più stringhe di connessione nel web.config, e seguire di seguito:

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

e poi dove si vuole creare l'istanza di entità, passare il collegamento nome della stringa nel parametro:

MyDatabaseEntities entities = new MyDatabaseEntities("CONNECTION_STRING_NAME"); 

Spero che questo ti possa aiutare.

Grazie

Problemi correlati