Ich erstelle eine Anwendung, die Entity Framework verwendet; speziell Datenbank zuerst.Entity Framework-Laufzeit ConnectionString bei Verwendung der Datenbank zuerst
Wenn sich der Benutzer anmeldet, wird zur Laufzeit ein ConnectionString
erstellt, der dann für die Datenverarbeitung in der Anwendung verwendet werden soll.
ich gefunden habe bereits eine Reihe von Lösungen für diese im Internet, die darauf hindeuten, dass die Art und Weise, dies zu tun ist, einen anderen Konstruktor für die DbContext
Klasse zu implementieren, die erstellt wird, die die Basis DbContext(string)
nennt:
public ApplicationDbContext(SqlConnection Connection)
: base(Connection.ConnectionString)
{
}
Dies habe ich in einer separaten Datei erstellt, die eine public partial class
des generierten Codes ist, um jeden weiteren generierten Code zu berücksichtigen, der überschreibt, was sich bereits in diesen Dateien befindet.
Wenn jedoch die Anwendung ausgeführt wird, sobald eine ApplicationDbContext
wird diese zusätzliche Konstruktor erstellt, wird die folgende Ausnahme ausgelöst:
„Der Zusammenhang mit dem Code in der Code-Erste-Modus verwendet wird, die erzeugt wurde aus einer EDMX-Datei für entweder Database First oder Model First-Entwicklung ... "
Dies würde Sinn machen, da ich einen Datenbank-Ansatz verwende. Alle Antworten, die ich gesehen habe, wo Database First verwendet wird, schlagen jedoch vor, dies zu tun.
Nachdem auf MSDN ein wenig weiter in sie sah, wie ich sehe, dass es tatsächlich eine andere DbContext
Konstruktor ist, die ich verwenden könnte: DbContext(String, DbCompiledModel)
. Ich frage mich, ob das ist, was ich vermisse und das ist der Konstruktor, den ich brauche, da ich gesagt hätte, dass ich ein kompiliertes Modell verwende (... oder bin ich?).
Ist dies jedoch der richtige Weg, oder muss dies anders gehandhabt werden?
[Verbinden mit Datenbank für Multi-Tenant-Anwendung?] (Http://stackoverflow.com/questions/32717832/connecting-to-database-for-multi-tenant-application) –
Danke für die Rückmeldung; aber ich habe versucht, den ConnectionString auf diese Weise zu erstellen, und ich bekomme immer noch den gleichen Fehler. Ich überprüfte das Format des ConnectionString in App.config, um die gleichen Parameter zu replizieren, die in dem ConnectionString sind, der standardmäßig verwendet wird, aber wenn ich versuche, den ConnectionString mithilfe dieser Daten zu erstellen, erhalte ich den Fehler "Schlüsselwort nicht unterstützt" für 'provider', 'connectionstring' und für 'provider connection string'. Wenn man diese entfernt, kann man die Zeichenkette konstruieren, aber wie gesagt, führt das gerade zum ursprünglichen Fehler. –
Das Problem liegt in der Verbindungszeichenfolge, die an den Konstruktor übergeben wird. –