Как использовать локальную схему для F # SqlProgrammabilityProvider, вызывающего хранимую процедуру - PullRequest
2 голосов
/ 04 июня 2019

Я могу использовать 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

1 Ответ

1 голос
/ 10 июня 2019

Я открыт для любого метода, который работает здесь.

CONN в SqlProgrammabilityProvider<CONN> - это соединение для проектирования / компиляции, используемое провайдером типов для генерации типов. CONN in myDB.dbo.usp_MyStoredProcedure(CONN,commandTimeout=600) используется для доступа к базе данных во время выполнения. Это будут разные .

Метод, который мы используем:

  1. Определение таблиц / функций / хранимых процедур в SSDT-проекте .
  2. При создании проекта SSDT создается сценарий создания (просто отметьте флажок), а шаг сборки powershell между созданием проекта SSDT и проектом поставщика типов развертывает его в localdb.
  3. Строка подключения поставщика времени разработки типа ссылается на localdb, а строка подключения среды выполнения указывает место, где находятся данные.

Это дает SQL intellisense через SSDT. И если проект компилируется, схема SQL должна быть совместима с запросами в проекте провайдера типов. Отличное сочетание функций .Net и F #.

...