我正在使用类型表达式:
type dbSchema = SqlDataConnection<ConnectionStringName="X1", ConfigFile="App.config">
这在编译时效果很好(我可以完全访问所有数据库类型),但在运行时失败。我认为这是因为控制台应用程序中生成的配置文件bin
目录被命名为其他名称,例如MyAppName.exe.config
,因此App.config
未找到文件。
当然,对于一个ASP.NET MVC类型应用程序使用web.config
,没有问题,因为编译和运行时配置文件名是相同的。
幸运的是,放置了一个副本App.config
in the 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 的引用。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)