【问题标题】:How to use local schema for F# SqlProgrammabilityProvider calling stored procedure如何为 F# SqlProgrammabilityProvider 调用存储过程使用本地架构
【发布时间】:2019-06-04 07:16:44
【问题描述】:

我可以使用 FSharp.Data.SqlProgrammabilityProvider 来调用我的存储过程,但我无法弄清楚如何将类型保存到本地架构以便远程构建服务器没有数据库访问构建成功。

对于查询普通表,我可以保存构建服务器使用的本地模式:FSharp.Data.TypeProviders.SqlEntityConnection

但是,SqlEntityConnection 无法访问我的存储过程。

虽然 SqlProgrammabilityProvider 可以调用我的存储过程,但它似乎没有该选项,因此请使用本地架构。

我愿意接受任何适用于此的方法。

let [<Literal>] private CONN = @"Data Source={...}; Initial Catalog={...};Integrated Security=True;Connect Timeout=180"
type myDB = SqlProgrammabilityProvider<CONN>
let cmd = new myDB.dbo.usp_MyStoredProcedure(CONN,commandTimeout=600)
type TVPType = myDB.dbo.``User-Defined Table Types``.MyTableType
type ReturnRecord = myDB.dbo.usp_myStoredProcedure.Record

let createRawRecord (r : ReturnRecord) = 
  ... //Turn into F# record type.

let ids = ["id1"; "id2"] |> Seq.map(fun i -> TVPType(i))
let startDate = ...
let endDate = ...

cmd.AsyncExecute(ids, startDate, endDate)
|> Async.RunSynchronously
|> Seq.map (createRawRecord)
|> Seq.toArray

【问题讨论】:

    标签: sql-server f# database-schema type-providers fsharp.data.typeproviders


    【解决方案1】:

    我愿意接受任何适用于此的方法。

    CONN in SqlProgrammabilityProvider&lt;CONN&gt; 是设计/编译时连接,类型提供程序使用它来生成类型。 myDB.dbo.usp_MyStoredProcedure(CONN,commandTimeout=600) 中的CONN 用于在运行时访问数据库。这些将是different

    我们使用的方法是:

    1. SSDT project 中定义表/函数/存储过程。
    2. 构建 SSDT 项目会生成一个创建脚本(只需勾选该框),然后在构建 SSDT 项目和类型提供程序项目之间的 powershell 构建步骤将其部署到 localdb。
    3. 类型提供者的设计时连接字符串引用localdb,运行时连接字符串引用数据所在的地方。

    这通过 SSDT 提供 SQL 智能感知。如果项目编译,SQL 模式必须与类型提供程序项目中的查询兼容。 .Net 和 F# 功能的完美结合。

    【讨论】:

      猜你喜欢
      • 2022-01-26
      • 1970-01-01
      • 2015-01-11
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      相关资源
      最近更新 更多