8

Sto migrando un'applicazione Web esistente (utilizzando Entity Framework 5) a un ruolo Web di Azure.Entity Framework DbContext nel ruolo Web di Azure

La stringa di connessione del database viene spostata dallo web.config ai file ServiceConfiguration.*.cscfg.

Il problema è che nel file auto-generataModel.Context.cs, la mia classe entità è definita in questo modo:

public partial class MyEntities : DbContext 
{ 
    public MyEntities() 
     : base("name=MyEntities") 
    { } 

    // DbSets, etc 
} 

Questo sarà sempre cercare MyEntities nel web.config. Come posso eseguire l'override di questo costruttore in modo che possa passare la stringa di connessione dal file ServiceConfiguration.*.cscfg?

mi potrebbe derivare da questa classe, in questo modo:

public class MyCloudEntities : MyEntities 
{ 
    public MyCloudEntities() 
     : base(CloudConfigurationManager.GetSetting("MyEntities")) 
    { } 
} 

Ma poi devo cambiare ogni istanza di MyEntities nella base di codice, e non ci vorrà impedire agli sviluppatori di utilizzare MyEntities in futuro.

+0

Perché si desidera memorizzare la connessione nel file di configurazione azzurro? Hai mai avuto bisogno di cambiare il connectiontring in fase di runtime? – Fore

+2

No, ma la stringa di connessione è diversa per ambiente. – davenewza

risposta

7

È possibile modificare il file Model.Context.tt, da utilizzare

CloudConfigurationManager.GetSetting("MyEntities") 

al posto di

"name=MyEntities" 

per MyEntities

Così, ogni volta che verrà ricreato contesto, avrai sempre i tuoi cambiamenti. In questo caso non è necessario modificare altro.

+0

Dove dovrei cambiare questo? Non riesco a modificare il file di contesto perché è stato generato automaticamente. Grazie per la risposta. – davenewza

+1

A destra, non è possibile modificare il file di contesto (Model.Context.cs) perché verrà ricreato, ma tale file viene generato dal file modello (Model.Context.tt). È necessario aprire il file Model.Context.tt come file di testo normale (VS funziona perfettamente) e trovare il posto con 'base (" name = <# = container.Name #> ")', dopodiché basta cambiarlo per 'base (CloudConfigurationManager.GetSetting (" MyEntities "))', salvare il file e fare clic con il pulsante destro del mouse su di esso in Esplora soluzioni, trovare la voce di menu "Esegui strumento personalizzato" e fare clic su di esso. Model.Context.cs verrà ricreato con le nuove modifiche. –

+0

Dato che hai cambiato modello, le tue modifiche non andranno perse. –

Problemi correlati