我有一个F#库项目,我正在使用C#web项目。我想在我的F#项目中使用实体框架类型提供程序,并让它从Web.config
获取连接字符串 - 但是我无法使其工作。
type internal FooDb =
SqlEntityConnection<ConnectionStringName="FooDb", Pluralize=true>
在设计时,我需要在F#库项目中有一个App.config
文件,其连接字符串具有匹配的名称。
在运行时,当从C#Web项目调用我的F#代码时,我收到一个错误,它无法找到“App.config”文件。这让我感到惊讶,因为我期望在运行时它只使用ConfigurationManager.ConnectionStrings
从当前活动的配置文件加载连接字符串(对于Web应用程序,Web.config
)。然而,情况似乎并非如此。
我尝试添加ConfigFile
参数:
type internal FooDb =
SqlEntityConnection<ConnectionStringName="FooDb", ConfigFile="Web.config", Pluralize=true>
但这只是让它在设计时抱怨它无法找到Web.config
。
然后我将F#库项目中的App.config
文件重命名为Web.config
,这似乎让事情变得有效了。但是,我对这个解决方案感到不安。这真的是它的工作方式吗?我必须在我的库项目中有一个web.config文件?如果我想从命令行可执行文件中使用相同的库,那么我该怎么办?在该环境中,配置文件被称为AssemblyName.exe.config
?
强迫我硬编码在不同上下文中可能具有不同名称的配置文件的名称似乎非常脆弱,而且设计很差。请告诉我,我错过了什么。
答案 0 :(得分:3)
你遇到的问题看起来确实很不幸,我不知道你是否遗漏了什么。但是,SqlEntityConnection documentation表示FooDb
应该有GetDataContext
重载,其中“在运行时确定连接字符串时可以使用”connectionString参数。“也许这会给你一个足够好的解决方法(即自己传递ConfigurationManager.ConnectionStrings
的连接字符串)。