我正在使用类型表达式:
type dbSchema = SqlDataConnection<ConnectionStringName="X1", ConfigFile="App.config">
这在编译时效果很好(我可以完全访问所有 db 类型),但在运行时失败。我认为这是因为控制台应用程序的
bin
中生成的配置文件目录被命名为其他名称,例如 MyAppName.exe.config
,因此 App.config
找不到文件。当然,对于使用
web.config
的 ASP.NET MVC 类型的应用程序,没有问题,因为编译和运行时配置文件名是相同的。幸运的是,放置了一个副本
App.config
在 bin
目录确实解决了这个问题,但这是我们应该做的吗?有什么想法吗?
最佳答案
类型提供程序定义如何工作的描述具有误导性 - 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/