Siamo in un ambiente misto in cui la nostra applicazione utilizza sia ADO.NET che Entity Framework.
Poiché entrambi puntano allo stesso server SQL fisico, vorremmo rimuovere la stringa di connessione di Entity Framework dal file di configurazione e quindi creare automaticamente la stringa in base alle stringhe di connessione ADO.NET correnti.
Questo ci evita errori in cui uno sviluppatore ha modificato la stringa ADO.NET ma ha dimenticato di modificare la stringa di connessione di Entity Framework.Entity Framework 6 set runtime stringa di connessione
Ho letto questo ma non hanno risposto alla domanda.
How do I create connection string programmatically to MS SQL in Entity Framework 6?
Se creo la mia DbConnection e passo che al DbContext (ExistingConnection, contextOwnsConnection) allora genera un errore "Il contesto è utilizzato in codice prima modalità con il codice che è stato generato da un file EDMX per entrambi Sviluppo del database First o Model First. "
Non sto utilizzando il codice.
https://msdn.microsoft.com/en-us/data/jj680699
Questa parlato configurazione base di codice in EF 6 ma l'articolo non mostra alcun codice che effettivamente cambiato la stringa di connessione.
AGGIORNATO: ulteriori informazioni per chiarire la mia domanda.
NON sto usando il codice per primo e vorrei costruire una stringa di connessione al di fuori del file di configurazione.
Il DbContext che sto usando è una classe parziale del file DbContext generato automaticamente che il modello T4 sta generando.
Avevo l'impressione che fosse necessario creare una classe DbConfiguration ereditata e fare qualcosa in quella classe, ma l'unico che trovo è usare Azure.
C'è un articolo su Code Project che parla dell'impostazione della stringa di connessione in fase di esecuzione ma l'articolo è basato sulla creazione di una stringa di connessione ogni volta che creo un nuovo contenitore Entity.
http://www.codeproject.com/Tips/234677/Set-the-connection-string-for-Entity-Framework-at
Vorrei essere in grado di usare la mia classe DbContext parziale per creare la stringa di connessione in modo che il chiamante non deve fare nulla di speciale.
AGGIORNAMENTO: codice di lavoro per RunTime ma non designtime
Utilizzando il codice inviato da @Circular Riferimento "di seguito elencati", sono stato in grado di cambiare la stringa di connessione senza modificare le chiamate verso la mia classe entità, ma questo non funziona per il file EDMX DesignTime.
public partial class TestEntities : DbContext
{
public TestEntities() : base(GetSqlConnection(), true)
{
}
public static DbConnection GetSqlConnection()
{
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
var connectionSettings = ConfigurationManager.ConnectionStrings("Current_ADO_Connection_In_Config");
// Set the provider name.
entityBuilder.Provider = connectionSettings.ProviderName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = connectionSettings.ConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = "res://*/Models.TestModel.csdl|res://*/Models.TestModel.ssdl|res://*/Models.TestModel.msl";
return new EntityConnection(entityBuilder.ToString());
}
}
Ora, se riesco a far funzionare il DesignTime, ciò andrebbe bene.
penso che si sarebbe utilizzando ObjectContext inste annuncio di DbContext, dal momento che non stai usando Code First. Non sono sicuro al 100% su questa relazione. Questo suggerisce: https://msdn.microsoft.com/en-us/library/bb738461(v=vs.110).aspx ed è collegato da qui descrivendo la creazione di una connessione: https://msdn.microsoft.com /en-us/library/bb738533%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – AaronLS
Le stringhe di connessione per CodeFirst sono in genere stringhe di connessione standard, in cui le stringhe di connessione per non-CodeFirst di solito sono riferimenti a csdl/file ssdl/msl. – AaronLS