2012-12-20 20 views
8

Mam projekt biblioteki F #, który używam z projektu sieci web C#. Chciałbym użyć Entity Framework Type Provider w moim projekcie F # i uzyskać ciąg połączenia od Web.config - ale mam problem z działaniem.Jak mogę uczynić dostawcę typu obiektu Entity przy użyciu pliku konfiguracyjnego środowiska wykonawczego?

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", Pluralize=true> 

w czasie projektowania, mam obowiązek mieć plik w projekcie biblioteki F # z ciągu połączenia o nazwie pasującej App.config.

W czasie wykonywania, wywołując mój kod F # z projektu C#, pojawia się błąd, że nie może zlokalizować pliku "App.config". To mnie zaskakuje, ponieważ spodziewałem się, że w czasie wykonywania użyje po prostu ConfigurationManager.ConnectionStrings do załadowania ciągu połączenia z aktualnie aktywnego pliku konfiguracyjnego (w przypadku aplikacji internetowej, Web.config). Jednak wydaje się, że tak nie jest.

Próbowałem dodanie parametru ConfigFile:

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", ConfigFile="Web.config", Pluralize=true> 

Ale to właśnie sprawiło, że skarżą się w czasie projektowania, że ​​nie może znaleźć Web.config.

Następnie zmieniłem nazwę pliku App.config w projekcie biblioteki F # na Web.config i wydaje się, że uzyskałem działające rzeczy. Jednak nie podoba mi się to rozwiązanie. Czy tak naprawdę ma działać? Muszę mieć plik web.config w moim projekcie biblioteki? Co powinienem zrobić, jeśli chciałem użyć tej samej biblioteki z pliku wykonywalnego wiersza poleceń, aw tym środowisku plik konfiguracyjny nosi nazwę AssemblyName.exe.config?

Zmuszenie mnie do zakodowania nazwy pliku konfiguracyjnego, który może mieć różne nazwy w różnych kontekstach, wydaje się bardzo kruchy i ma kiepski wygląd. Proszę powiedz mi, że czegoś mi brakuje.

Odpowiedz

3

Wystąpił problem, który wydaje się dość niefortunny, i nie wiem, czy czegoś brakuje, czy nie. Jednak SqlEntityConnection documentation mówi, że FooDb powinien mieć przeciążenie , gdzie "parametr connectionString może być używany, gdy łańcuch połączenia jest określony w czasie wykonywania." Być może to da ci wystarczająco przyzwoitą pracę (tj. Samemu przekazać ciąg połączenia od ConfigurationManager.ConnectionStrings).

Powiązane problemy