Wie kann ich den Entity Framework Type Provider dazu bringen, die Runtime-Konfigurationsdatei zu verwenden?

8

Ich habe ein F # -Bibliotheksprojekt, das ich aus einem C # -Webprojekt verwende. Ich möchte den Entity Framework Type Provider in meinem F # -Projekt verwenden und erhalte die Verbindungszeichenfolge von Web.config - aber ich habe Probleme damit, das funktioniert zu bekommen.

%Vor%

Zur Entwurfszeit muss eine App.config -Datei im F # -Bibliotheksprojekt mit einer Verbindungszeichenfolge mit dem passenden Namen vorliegen.

Zur Laufzeit wird beim Aufruf meines F # -Codes aus dem C # -Webprojekt ein Fehler angezeigt, dass die Datei "App.config" nicht gefunden werden kann. Das überrascht mich, weil ich erwartet habe, dass zur Laufzeit nur ConfigurationManager.ConnectionStrings verwendet wird, um die Verbindungszeichenfolge aus der aktuell aktiven Konfigurationsdatei zu laden (im Fall einer Web-App Web.config ). Dies scheint jedoch nicht der Fall zu sein.

Ich habe versucht, den Parameter ConfigFile hinzuzufügen:

%Vor%

Aber das hat es gerade zur Entwurfszeit beklagen lassen, dass es Web.config nicht finden konnte.

Dann habe ich die App.config -Datei im F # -Bibliotheksprojekt in Web.config umbenannt, und das scheint die Dinge funktionieren zu lassen. Ich bin jedoch unzufrieden mit dieser Lösung. Soll das wirklich funktionieren? Ich muss eine web.config-Datei in meinem Bibliotheksprojekt haben? Was würde ich tun, wenn ich dieselbe Bibliothek von einer ausführbaren Befehlszeile aus verwenden möchte, und in dieser Umgebung heißt die Konfigurationsdatei AssemblyName.exe.config ?

Das Erzwingen, den Namen einer Konfigurationsdatei, die in verschiedenen Kontexten unterschiedliche Namen haben kann, hart zu codieren, erscheint sehr spröde und ein schlechtes Design. Bitte sag mir, dass ich etwas vermisse.

    
Joel Mueller 20.12.2012, 17:14
quelle

1 Antwort

3

Das Problem, auf das Sie gestoßen sind, scheint in der Tat ziemlich unglücklich zu sein, und ich weiß nicht, ob Sie etwas vermissen oder nicht. Die SqlEntityConnection-Dokumentation sagt jedoch, dass FooDb haben sollte a GetDataContext overload, wobei ein "connectionString-Parameter verwendet werden kann, wenn die Verbindungszeichenfolge zur Laufzeit bestimmt wird." Vielleicht gibt Ihnen das eine anständige Arbeit (zB übergeben Sie die Verbindungszeichenfolge von ConfigurationManager.ConnectionStrings selbst).

    
Stephen Swensen 22.12.2012, 22:29
quelle