如何使实体框架类型提供程序使用运行时配置文件?

Joe*_*ler 8 f# entity-framework type-providers

我有一个F#库项目,我正在使用C#web项目.我想在我的F#项目中使用实体框架类型提供程序,并从中获取连接字符串Web.config- 但是我无法使其工作.

type internal FooDb = 
    SqlEntityConnection<ConnectionStringName="FooDb", Pluralize=true>
Run Code Online (Sandbox Code Playgroud)

在设计时,我需要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>
Run Code Online (Sandbox Code Playgroud)

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

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

强迫我硬编码在不同上下文中可能具有不同名称的配置文件的名称似乎非常脆弱,并且设计很差.请告诉我,我错过了什么.

Ste*_*sen 3

你遇到的问题看起来确实很不幸,我不知道你是否遗漏了一些东西。然而,SqlEntityConnection 文档表示FooDb应该有一个GetDataContext重载,其中“在运行时确定连接字符串时可以使用connectionString 参数”。也许这会给你一个足够好的解决方法(即从你自己传递连接字符串ConfigurationManager.ConnectionStrings)。