如何使用app.config将db连接字符串与FSharp.Data.TypeProviders一起使用?

时间:2016-03-09 10:18:45

标签: f# f#-data

我成功使用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 :(得分:0)

在生产环境中,您可能会遇到普通SQL数据提供程序的问题,因为编译机器需要与数据库计算机的实时连接。尝试解决该问题的the Dbml type provider,但也允许您以编程方式提供连接字符串。

  • 首先运行sqlmetal将数据库架构信息提取到元语言文件中:从VS命令提示符运行sqlmetal /server:yourDB\SQLInstance /database:MyDB /sproc /dbml:schema.dbml
  • 您将编译器指向该架构信息文件 - 在编译时不再需要查询数据库:let dbml = DbmlFile<"schema.dbml">
  • 然后,您可以在运行时提供实际的连接字符串:let db = dbml.MyDB(whateverConnectionString)

the MSDN page about setting up Dbml

还提供了一个很好的分步指南