SqlDataConnection类型提供程序 - 使用脚本参数设置数据库连接字符串

7
使用SqlDataConnection类型提供程序的常规方式如下:
type dbSchema = SqlDataConnection<"Data Source=MYSERVER\INSTANCE;InitialCatalog=MyDatabase;Integrated Security=SSPI;">
let db = dbSchema.GetDataContext()

然而我们有一个问题,即我们想在一个 F# 脚本中使用此类型提供程序,其中数据库的连接字符串作为参数传递。因此,我想做的是这样的:

let connectionString= Array.get args 1
type dbSchema = SqlDataConnection<connectionString>

然而,它会出现错误:“这不是常量表达式或有效的自定义属性值”。

有没有什么方法可以解决这个问题?

2个回答

9

很遗憾,没有办法做到这一点,类型提供程序需要编译时字面字符串。这样,在编译应用程序时,类型提供程序能够连接并检索有关数据库的元数据,并为编译器生成类型。您可以选择将连接字符串提取到字符串字面量中,方法是按照以下形式编写:

[<Literal>] let connString = "Data Source=..."
type dbSchema = SqlDataConnection<connString>

假设您的两个数据库具有相同的架构,那么可以将运行时连接字符串作为参数提供给GetDataContext方法,例如:
let connectionString = args.[1]
let dbContext = dbSchema.GetDataContext(connectionString)

1
我一直采用的方法是,在设计时使用硬编码的文字字符串(使用 "Literal" 属性),并在获取数据上下文时使用配置中的本地字符串。我使用本地数据库模式(也是硬编码的)来加快开发过程中的智能感知速度。
type private settings = AppSettings<"app.config">
let connString = settings.ConnectionStrings.MyConnectionString
type dbSchema = Microsoft.FSharp.Data.TypeProviders.SqlDataConnection<initialConnectionString, Pluralize = true, LocalSchemaFile = localDbSchema , ForceUpdate = false, Timeout=timeout>
let indexDb = dbSchema.GetDataContext(connString);

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