8

我有一个从 C# Web 项目中使用的 F# 库项目。我想在我的 F# 项目中使用实体框架类型提供程序,并让它从Web.config- 但我无法让它工作。

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

在设计时,我需要App.config在 F# 库项目中有一个文件,其连接字符串具有匹配的名称。

在运行时,当从 C# Web 项目调用我的 F# 代码时,我收到一个错误,它无法找到“App.config”文件。这让我感到惊讶,因为我期望在运行时它只会用于ConfigurationManager.ConnectionStrings从当前活动的配置文件(在 Web 应用程序的情况下Web.config)加载连接字符串。然而,情况似乎并非如此。

我尝试添加ConfigFile参数:

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

但这只是让它在设计时抱怨它找不到Web.config

然后我App.config将 F# 库项目中的文件重命名为Web.config,这似乎让事情变得正常了。但是,我对这个解决方案感到不安。这真的是它的预期工作方式吗?我的库项目中必须有一个 web.config 文件吗?如果我想从命令行可执行文件中使用相同的库,并且在该环境中调用配置文件,我会怎么做AssemblyName.exe.config

强迫我硬编码在不同上下文中可以有不同名称的配置文件的名称似乎很脆弱,而且设计很糟糕。请告诉我我错过了什么。

4

1 回答 1

3

你遇到的这个问题,看起来确实很不幸,不知道你是不是漏掉了什么。但是,SqlEntityConnection 文档FooDb应该有一个GetDataContext重载,其中“在运行时确定连接字符串时可以使用连接字符串参数”。也许这会给你一个足够体面的工作(即从ConfigurationManager.ConnectionStrings你自己传递连接字符串)。

于 2012-12-22T22:29:27.837 回答