2012-12-20 5 views
8

私はC#Webプロジェクトから使用しているF#ライブラリプロジェクトを持っています。私はF#プロジェクトでEntity Framework Type Providerを使用して、Web.configから接続文字列を取得したいと思いますが、この作業に問題があります。Entity Framework Type Providerに実行時設定ファイルを使用させるにはどうすればよいですか?

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

は、設計時には、私は、一致する名前を持つ接続文字列とF#ライブラリプロジェクトでApp.configファイルを持つことが必要です。

実行時に、C#WebプロジェクトからF#コードを呼び出すと、「App.config」ファイルが見つからないというエラーが表示されます。実行時に、現在アクティブな設定ファイル(Webアプリケーションの場合はWeb.config)から接続文字列をロードするのに、ConfigurationManager.ConnectionStringsを使用することを期待していたので、これは私を驚かせます。しかし、これはそうではないようです。

私はConfigFileパラメータを追加してみました:

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

しかし、これはちょうどそれがWeb.configを見つけることができなかったことを、設計時に文句を作りました。

次に、F#ライブラリプロジェクトのApp.configファイルの名前をWeb.configに変更しました。これは問題なく動作しているようです。しかし、私はこの解決策に不安です。これは実際にどのように動作するように意図されていますか?私は私のライブラリプロジェクトでweb.configファイルを持っている必要がありますか?コマンドライン実行可能ファイルから同じライブラリを使用したい場合はどうすればよいでしょうか?その環境では、設定ファイルはAssemblyName.exe.configと呼ばれていますか?

別のコンテキストで異なる名前を持つことができる設定ファイルの名前をハードコードすることは、非常に脆く、デザインが悪いようです。私に何かが足りないと教えてください。

答えて

3

あなたが遭遇した問題は、実際には不幸なようです。何か不足しているかどうかわかりません。ただし、SqlEntityConnection documentationは、FooDbGetDataContextのオーバーロードを持つ必要があり、「接続文字列が実行時に決定されるときにconnectionStringパラメータが使用される」と述べています。おそらくそれはあなたにまともな動きを与えます(つまり、ConfigurationManager.ConnectionStringsから接続文字列を渡します)。

関連する問題