Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何为F#SqlProgrammabilityProvider调用存储过程使用本地模式_Sql Server_F#_Database Schema_Type Providers_Fsharp.data.typeproviders - Fatal编程技术网

Sql server 如何为F#SqlProgrammabilityProvider调用存储过程使用本地模式

Sql server 如何为F#SqlProgrammabilityProvider调用存储过程使用本地模式,sql-server,f#,database-schema,type-providers,fsharp.data.typeproviders,Sql Server,F#,Database Schema,Type Providers,Fsharp.data.typeproviders,我能够使用FSharp.Data.SqlProgrammabilityProvider调用我的存储过程,但我无法想出如何将类型保存到本地架构,以便在没有DB访问权限的情况下成功构建远程构建服务器 为了查询普通表,我可以保存生成服务器使用的本地模式:FSharp.Data.TypeProviders.SqlEntityConnection 但是,SqlEntityConnection无法访问我的存储过程 虽然SqlProgrammabilityProvider可以调用我的存储过程,但它似乎没有使用

我能够使用FSharp.Data.SqlProgrammabilityProvider调用我的存储过程,但我无法想出如何将类型保存到本地架构,以便在没有DB访问权限的情况下成功构建远程构建服务器

为了查询普通表,我可以保存生成服务器使用的本地模式: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
let[]private CONN=@“数据源={…};初始目录={…};集成安全性=True;连接超时=180”
类型myDB=SqlProgrammabilityProvider
让cmd=new myDB.dbo.usp\u mystoredprocesdure(CONN,commandTimeout=600)
类型TVPType=myDB.dbo.`User Defined Table Types`.MyTableType
键入ReturnRecord=myDB.dbo.usp_myStoredProcedure.Record
让createRawRecord(r:ReturnRecord)=
... //变成F#记录类型。
让ids=[“id1”;“id2”]|>Seq.map(乐趣i->TVPType(i))
让startDate=。。。
让endDate=。。。
cmd.AsyncExecute(id、startDate、endDate)
|>异步运行
|>Seq.map(createRawRecord)
|>序号:toArray
我对任何在这里有效的方法都持开放态度

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
SqlProgrammabilityProvider
中的
CONN
是类型提供程序用来生成类型的设计/编译时连接<在
myDB.dbo.usp\u mystoredprocesdure(CONN,commandTimeout=600)中的code>CONN
用于在运行时访问数据库。这些将是

我们使用的方法是:

  • 在中定义表/函数/存储过程
  • 构建SSDT项目会生成一个创建脚本(只需勾选该框),而构建SSDT项目和类型提供程序项目之间的powershell构建步骤会将该脚本部署到localdb
  • 类型提供程序的设计时连接字符串引用localdb,运行时连接字符串引用数据所在的位置
  • 这通过SSDT提供了SQL智能感知。如果项目编译,SQL模式必须与类型提供程序项目中的查询兼容。Net和F#功能的完美结合