Wie verwende ich eine dynamische Verbindungszeichenfolge mit einem Model First-Ansatz und verwende trotzdem das Datenmodell in der EDMX?

Ich habe eine EDMX mit EF 5 nach dem Modell-First-Ansatz erstellt, d. H. Ich habe mit einem leeren Designer begonnen und meine Entitäten modelliert. Jetzt möchte ich dieses in EDMX definierte Modell verwenden können, aber SQL Server-Verbindungszeichenfolgen zur Laufzeit bereitstellen, ohne die Konfigurationsdatei zu ändern.

Ich weiß, wie eine Verbindungszeichenfolge an DbContext übergeben wird, aber das Problem besteht darin, die Metadaten für die Zuordnungen in der Assembly zu finden.

Beispielsweise hat mein EDMX diese Verbindungszeichenfolge in der app.config

<add name="MesSystemEntities" connectionString="metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyMachine;initial catalog=MesSystem;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Der Teil, den ich vermisse, ist der"metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;"

Ich möchte einen erstellen könnenDbContext Programmgesteuertes Übergeben einer SQL Server-Verbindungszeichenfolge, aber "Hinzufügen" des Metadatenteils.

Das möchte ich mit der T4-Datei erzeugen ...

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

    public MesSystemEntities(string sqlServerConnectionString)
        : base(GetEfConnectionString(sqlServerConnectionString))
    {    
    }

    private string GetEfConnectionString(string sqlServerConnectionString)
    {
       // values added by T4 generation
       string format = "metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;;provider=System.Data.SqlClient;provider connection string=\"{0}\"";    
       return String.Format(format, sqlServerConnectionString);
    }
...
}

Meine Frage ist, wie ich die Metadaten erhalten kann, die ich in der T4-Generierungsdatei benötige, um die Entity Framework-Verbindung zu erstellen, ohne sie für jede EDMX-Datei fest zu codieren

ODER

Gibt es eine einfachere Möglichkeit zum programmgesteuerten Laden der Metadaten aus der Assembly?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage