Angabe von EntityFramework-Anbietername in einer Azure-Funktion

Ich versuche, Webjob-Code auf die neuen Azure-Funktionen zu portieren. Bisher habe ich es geschafft, meine DLLs zu importieren und sie erfolgreich zu referenzieren. Wenn ich jedoch die Verbindungszeichenfolge in meinem Code verwende, erhalte ich die Fehlermeldung, dass ich den Provider-Namen hinzufügen muss:

Die Verbindungszeichenfolge 'ConnectionString' in der Konfigurationsdatei der Anwendung enthält nicht das erforderliche providerName-Attribut. "

Was normalerweise kein Problem ist, weil es sich bei einem Webjob (oder einer Web-App) um eine App oder eine Web.config handelt und die Verbindungszeichenfolge einfach mit den in Azure eingegebenen Daten überschrieben wird.

Mit Azure-Funktionen habe ich keine web.config (obwohl ich versucht habe, eine hinzuzufügen, ohne Erfolg), daher fehlt natürlich der Providername.

Wie gebe ich das an?

BEARBEITEN Nach einigem Herumspielen und ein paar hilfreichen Tipps von Leuten unten, habe ichfas hat es geschafft, es zum Laufen zu bringen.

Was ich jetzt mache ist das folgende:

    var connString = **MY CONN STRING FROM CONFIG**; // Constring without metadata etc.
    EntityConnectionStringBuilder b = new EntityConnectionStringBuilder();
    b.Metadata = "res://*/Entities.MyDB.csdl|res://*/Entities.MyDB.ssdl|res://*/Entities.MyDB.msl";
    b.ProviderConnectionString = connString.ConnectionString;
    b.Provider = "System.Data.SqlClient";
    return new MyDB(b.ConnectionString);

Welche gibt mir was ich zum Aufrufen der Datenbank brauche. Ich benutze eine statische Methode in einer Teilklasse, um eine Instanz der Datenbank zu erhalten, die den obigen Code ausführt, und ich dekoriere mein MyDB Partial mit[DbConfigurationType(typeof(MyDbConfiguration))]

Ich definiere diese Konfiguration als:

public class MyDBConfiguration: DbConfiguration
{
    public MyDBConfiguration()
    {
        SetProviderFactory("System.Data.EntityClient", EntityProviderFactory.Instance);
    }
}

My Problem bleibt wenn ich die EF Entities tatsächlich nutzen will. Hier wird versucht, den Datenbanktyp @ zu initialisiere unter Verwendung der ursprünglichen Konfiguration, gib mir den ursprünglichen Fehler noch einmal. Nach diesem Stack-Trace:

at Void Initialize()
at System.Data.Entity.Internal.EntitySetTypePair GetEntitySetAndBaseTypeForType(System.Type)
at Void InitializeContext()
at System.Data.Entity.Core.Objects.ObjectContext CreateObjectContextFromConnectionModel()
at Void Initialize()
at Boolean TryInitializeFromAppConfig(System.String, System.Data.Entity.Internal.AppConfig)
at Void InitializeFromConnectionStringSetting(System.Configuration.ConnectionStringSettings)

Sowie vermeide ich das? Ich schätze, ich brauche eine Möglichkeit, mich in alles einzuklinken und meinen benutzerdefinierten Setter auszuführen ..

Antworten auf die Frage(12)

Ihre Antwort auf die Frage