我该如何使用app.config与FSharp.Data.TypeProviders建立数据库连接字符串?

3
我成功地使用 FSharp.Data.TypeProviders 访问我的数据库。我还使用FSharp.Configuration 从 app.config 读取值。
在 F# 中硬编码连接字符串会引起问题,因为我需要部署到多个暂存环境。所以,我想将这两种方法结合起来,使得我的数据库连接字符串可以从 app.config 获取。不幸的是,我的初步尝试失败了。
以下是摘要代码:

'

open System

open FSharp.Configuration             
open FSharp.Data.TypeProviders

type Settings = AppSettings<"app.config">

// in app.config <add name="Target"  connectionString="blahblah"/>
let ConnectionString = Settings.ConnectionStrings.Target

type Sql = SqlDataConnection<ConnectionString>

// ...
use db = Sql.GetDataContext()

// query db, etc.

我明白类型提供程序为什么会失败,但我想问是否有人有建议允许我动态提供连接字符串?

澄清一下:我特别想使用FSharp.Data.TypeProviders,因为类型提供程序提供给我的功能。我不想要C#的解决方案。

1个回答

0
在生产环境中,您可能会遇到使用普通的 SQL 数据提供程序时出现问题,因为编译机器需要与您的 DB 机器保持实时连接。尝试使用 Dbml 类型提供程序,它可以解决这个问题,并允许您以编程方式提供连接字符串。
  • 首先运行 sqlmetal 将数据库模式信息提取到元语言文件中:从 VS 命令提示符中运行 sqlmetal /server:yourDB\SQLInstance /database:MyDB /sproc /dbml:schema.dbml
  • 将编译器指向该模式信息文件 - 不再需要在编译时查询数据库:let dbml = DbmlFile<"schema.dbml">
  • 然后可以在运行时提供实际的连接字符串:let db = dbml.MyDB(whateverConnectionString)

有一个非常好的逐步指南也可在 MSDN 页面上关于设置 Dbml 上找到。


编译后连接字符串不是固定的,这是不正确的。 - Fyodor Soikin
谢谢,你说得对。已经更正了。看来我已经有太多“无变异”思维了;-) - Anton Schwaighofer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接