Я адаптировал свой код из инструкции здесь .
open FSharp.Data.Sql
let [<Literal>] connection_str = "Server=localhost;Port=3306;SSL Mode=None;Uid=<UID>;Pwd=<PWD>;Database=<DB>"
type provider = SqlDataProvider<Common.DatabaseProviderTypes.MYSQL, connection_str>
let context = provider.GetDataContext()
context.Procedures.SpGetFrontContracts.Invoke(1)
Intellisense работает до периода после SpGetFrontContracts. После этого ничего. Пытаясь скомпилировать, я получаю:
Error FS0039 The field, constructor or member 'Invoke' is not defined.
В противном случае я могу подключаться к базе данных, вставлять и запрашивать данные, пока я придерживаюсь таблиц и представлений.
SpGetFrontContracts - это допустимая хранимая процедура в моей базе данных (ее фактическое имя - sp_get_front_contracts, но поставщик типа, похоже, удаляет подчеркивания). Я могу успешно запустить его, используя HeidiSQL. В случае, если это полезно, вот код создания:
CREATE DEFINER=`<UID>`@`localhost` PROCEDURE `sp_get_front_contracts`(
IN `Group` INT
)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
SELECT p.DateTime, p.Contract, p.Volume, c.Name
FROM tbl_contract_price_data p
INNER JOIN tbl_contracts c on p.Contract = c.ID
WHERE c.`Group` = `Group`
ORDER BY p.DateTime
LIMIT 1000;
END
Я попытался создать более простой sproc с именем 'test', без параметров и просто запустил оператор select. Он обнаружился в поставщике типов в разделе «Процедуры», но я снова не смог вызвать Invoke
.
Мое лучшее предположение заключается в том, что Invoke
наследуется из некоторого пространства имен или ссылки на сборку, которой у меня нет, поэтому в настоящее время я просматриваю источник SqlProvider , чтобы попытаться выяснить, что это может быть. Я сейчас ссылаюсь:
- FSharp.Core
- FSharp.Data
- FSharp.Data.SqlProvider
- mscorlib
- System
- System.Core
- System.Data
- System.Numerics
- System.ValueTyple
- System.Xml.Linq
Спасибо за любые предложения.
Редактировать: Похоже, что действие находится в SqlDesignTime.fs в функции generateSprocMethod, которая начинается в строке 346. Я попытаюсь выяснить, что там происходит.
Редактировать: После трех дней ударившись головой об этом, я сдался и просто использовал MySQL Connector / NET .