8

Ich migriere eine vorhandene Webanwendung (mit Entity Framework 5) zu einer Azure-Webrolle.Entity Framework DbContext in der Azure-Webrolle

Die Datenbankverbindungszeichenfolge wird von den Dateien web.config in die Dateien ServiceConfiguration.*.cscfg verschoben.

Das Problem ist, dass in der automatisch generierteModel.Context.cs Datei wird meine Entitäten Klasse wie folgt definiert:

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

    // DbSets, etc 
} 

Dies wird immer für MyEntities Blick in den web.config. Wie kann ich diesen Konstruktor überschreiben, so dass ich die Verbindungszeichenfolge aus der Datei ServiceConfiguration.*.cscfg übergeben kann?

ich von dieser Klasse ableiten könnte, etwa so:

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

Aber dann muß ich jede Instanziierung MyEntities in der Code-Basis ändern, und es wird nicht verhindern, dass Entwickler von MyEntities in Zukunft verwenden.

+0

Warum möchten Sie die Verbindungszeichenfolge in der azure-Konfigurationsdatei speichern? Müssen Sie die Verbindungszeichenfolge zur Laufzeit ändern? – Fore

+2

Nein, aber die Verbindungszeichenfolge ist für jede Umgebung unterschiedlich. – davenewza

Antwort

7

Sie können Model.Context.tt Datei ändern

CloudConfigurationManager.GetSetting("MyEntities") 

anstelle von

"name=MyEntities" 

für MyEntities

Also jedes Mal zu verwenden, wenn Kontext neu erstellt werden, Du wirst immer deine Änderungen haben. In diesem Fall müssen Sie nichts ändern.

+0

Wo würde ich das ändern? Ich kann die Kontextdatei nicht ändern, da sie automatisch generiert wird. Danke für die Antwort. – davenewza

+1

Richtig, Sie können die Kontextdatei (Model.Context.cs) nicht ändern, da sie neu erstellt wird, aber diese Datei wird aus der Vorlagendatei (Model.Context.tt) generiert. Sie müssen diese Model.Context.tt Datei als einfache Textdatei öffnen (VS funktioniert einfach perfekt dafür) und finden Sie einen Platz mit 'base (" name = <# = container.Name #> ")', danach ändern Sie einfach zu 'base (CloudConfigurationManager.GetSetting (" MyEntities "))', speichern Sie die Datei und klicken Sie im Projektmappen-Explorer mit der rechten Maustaste darauf, suchen Sie den Menüpunkt "Benutzerdefiniertes Werkzeug ausführen" und klicken Sie darauf. Model.Context.cs wird mit Ihren neuen Änderungen neu erstellt. –

+0

Da Sie die Vorlage geändert haben, gehen Ihre Änderungen nicht verloren. –