f# - 应该如何将 F# SqlDataConnection TypeProvider 与 App.Config 文件一起使用?

标签 f# app-config

我正在使用类型表达式:

type dbSchema = SqlDataConnection<ConnectionStringName="X1", ConfigFile="App.config">

这在编译时效果很好(我可以完全访问所有 db 类型),但在运行时失败。我认为这是因为控制台应用程序的 bin 中生成的配置文件目录被命名为其他名称,例如 MyAppName.exe.config ,因此 App.config找不到文件。

当然,对于使用 web.config 的 ASP.NET MVC 类型的应用程序,没有问题,因为编译和运行时配置文件名是相同的。

幸运的是,放置了一个副本 App.configbin目录确实解决了这个问题,但这是我们应该做的吗?有什么想法吗?

最佳答案

类型提供程序定义如何工作的描述具有误导性 - typedef 中的值实际上仅在代码/编译时重要,并且在运行时作为默认值。但是,正如您所指出的,在运行时找到正确的配置文件并不是很聪明。

您可以通过将连接字符串作为参数传递给 GetDataContext 来完成您想要的操作:

type dbSchema = SqlDataConnection<ConnectionStringName="X2">
let db = dbSchema.GetDataContext(ConfigurationManager.ConnectionStrings.["X2"].ConnectionString)

...或者如果您还想让它在 F# 交互式中工作,请像这样包装它:
type dbSchema = SqlDataConnection<ConnectionStringName="X2">
#if COMPILED
let db = dbSchema.GetDataContext(ConfigurationManager.ConnectionStrings.["X2"].ConnectionString)
#else
let db = dbSchema.GetDataContext()
#endif

(请注意,您将需要对 System.Configuration 的引用。)

关于f# - 应该如何将 F# SqlDataConnection TypeProvider 与 App.Config 文件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13768757/

相关文章:

f# - RavenDB 不会填充 Id 字段

wpf - 如何在 F# 中使用 WPF 菜单和对话框?

c# - 部署后配置文件中缺少 <configSections>

c# - App.Config自定义配置部分问题

.net - 从 .NET DLL 使用 webservice - app.config 问题

.net - 递归地将字符串拆分为字符列表

f# - 热声明一个空的 map /字典?

regex - 正则表达式 f#

amazon-web-services - 如何在 Amazon Elastic Beanstalk (AWS EBS) 上传递自定义环境变量?

c# - C# 控制台应用程序的 App.config 文件的 Web.config 样式转换?