【问题标题】:SqlDataConnection type provider - setting database connection string with script parameterSqlDataConnection 类型提供程序 - 使用脚本参数设置数据库连接字符串
【发布时间】:2015-01-26 01:16:23
【问题描述】:

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>

但是它给出了错误“这不是一个常量表达式或有效的自定义属性值”

有什么办法吗?

【问题讨论】:

    标签: f# type-providers


    【解决方案1】:

    不幸的是,没有办法做到这一点,类型提供程序需要一个编译时文字字符串。这样当您编译应用程序时,类型提供程序就能够连接和检索有关数据库的元数据并为编译器生成类型。您可以选择将连接字符串提取为字符串文字,方法是将其写成

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

    假设您的 2 个数据库具有相同的架构,则可以将您的运行时连接字符串作为参数提供给 GetDataContext 方法,例如

    let connectionString = args.[1]
    let dbContext = dbSchema.GetDataContext(connectionString)
    

    【讨论】:

      【解决方案2】:

      我一直这样做的方式是我有一个硬编码的文字字符串(使用“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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多