Ich hoffe, dass jemand in der Lage ist, mir zu helfen, weil es scheint, ich bin total festgefahren.Entity Framework Code Zuerst ohne app.config
Für kommende Projekte in unserem Unternehmen möchten wir Entity Framework 5 mit einem Code First Approach verwenden. Ich habe eine Weile herumgespielt und jedes Mal, wenn ich versuche, EF mit unseren vorhandenen Bibliotheken zu verwenden, scheitere ich, weil es scheint, dass EF stark auf einer bestehenden app.config beruht.
In unserem Unternehmen verfügen wir über eine interne Datenbankbibliothek, die es uns ermöglicht, Verbindungen zu verschiedenen Datenquellen und Datenbanktechnologien herzustellen und die Vorteile von MEF (Managed Extensibility Framework) für Datenbankanbieter zu nutzen. Ich muss nur einige Datenbankeinstellungen wie Host (oder Datei), Katalog, Benutzeranmeldeinformationen und einen Datenbankprovidernamen übergeben, die Bibliothek sucht nach dem passenden Plugin und gibt mir eine benutzerdefinierte Verbindungszeichenfolge oder IDbConnection zurück. Wir möchten diese Bibliothek zusammen mit EF verwenden, da wir flexibel darüber sein können, welche Datenbank wir verwenden, um die Datenbank zur Laufzeit zu ändern.
So. Ich habe gesehen, dass ein typisches DbContext-Objekt keine Parameter im Konstruktor akzeptiert. Es sucht automatisch nach der entsprechenden Verbindungszeichenfolge in app.config. Wir mögen solche Dinge nicht, also habe ich den Standardkonstruktor geändert, um ein DbConnection-Objekt zu übernehmen, das an die DbContext-Basisklasse übergeben wird. Kein Problem.
Probleme treten auf, wenn sich das erste Codemodell ändert. EF bemerkt das automatisch und sucht nach Migrationsklassen/Konfiguration. Aber: Eine typische Migrationsklasse benötigt einen parameterlosen Standardkonstruktor für den Kontext! Was für eine Schande!
So erstellen wir unsere eigene Migrationsklasse mit der IDbContextFactory-Schnittstelle. Aber wieder scheint es, dass auch diese IDbContextFactory einen parameterlosen Konstruktor benötigt, sonst kann ich keine Migrationen hinzufügen oder die Datenbank aktualisieren.
Weiterhin habe ich meinen eigenen Datenmigrationskonfigurator erstellt, wo ich den Kontext, auch die Zieldatenbank, übergebe. Problem ist hier: Es findet keine Migrationsklassen, egal was ich versuche.
Ich bin völlig fest, weil es die einzige Möglichkeit scheint, EF zu verwenden, wenn Verbindungszeichenfolgen in app.config gespeichert werden. Und das ist dumm, weil wir Datenbankverbindungen zur Laufzeit ändern müssen, und app.config ist für Standardbenutzer schreibgeschützt!
Wie löst man das?
Wenn Sie die Verbindungszeichenfolge nicht übergeben, dann muss sie aus der app.config gelesen werden? Ansonsten, wie würde es jemals finden? –