Sql server Can';在Linux的Mono上,在F#中使用SqlDataConnection进行编译

Sql server Can';在Linux的Mono上,在F#中使用SqlDataConnection进行编译,sql-server,f#,mono,monodevelop,Sql Server,F#,Mono,Monodevelop,我在Linux上使用mono,编写一个F#代码来访问SQL Server数据库。我正在使用SqlDataConnection 我的代码如下: namespace AggregatorService open FSharp.Data.TypeProviders open System.Data open System.Data.Linq module DataBaseProvider = type databaseConn = SqlDataConnection<Connec

我在Linux上使用mono,编写一个F#代码来访问SQL Server数据库。我正在使用SqlDataConnection

我的代码如下:

namespace AggregatorService

open FSharp.Data.TypeProviders
open System.Data
open System.Data.Linq

module DataBaseProvider = 

    type databaseConn = SqlDataConnection<ConnectionString = "Data Source=10.0.40.11;Initial Catalog=master;Persist Security Info=True;User ID=sa;Password=xxxxx">

    let getDataContext() =
        let dbConn = databaseConn.GetDataContext();
        dbConn
名称空间聚合服务
打开FSharp.Data.TypeProviders
开放系统.数据
开放系统.Data.Linq
模块数据库提供程序=
类型databaseConn=SqlDataConnection
让getDataContext()=
让dbConn=databaseConn.GetDataContext();
dbConn
我无法编译这段代码。我遇到了一个恼人的错误:

类型提供程序“FSharp.Data.TypeProvider.DesignTime.DataProviders”报告读取架构时出错。无法访问给定密钥(FIS3033)

我的package.config文件是:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Deedle" version="1.2.5" targetFramework="net40" />
  <package id="FSharp.Core" version="4.0.0.1" targetFramework="net40" />
  <package id="FSharp.Data" version="2.3.2" targetFramework="net40" />
  <package id="FSharp.Data.SqlClient" version="1.8.2" targetFramework="net40" />
  <package id="FSharp.Data.TypeProviders" version="5.0.0.2" targetFramework="net40" />
  <package id="NUnit" version="2.6.4" targetFramework="net40" />
  <package id="SQLProvider" version="1.0.22" targetFramework="net40" />
</packages>

一个C#程序是从同一台计算机连接的,因此,我认为问题不在于mono配置或Linux机器


任何人都有解决这个问题的方法或技巧吗?

不幸的是,mono似乎无法像我希望的那样处理这个包。搜索时,我发现有一个两年前的bug,但我还没有找到任何解决方案

我要做的是使用FSharp.Data.Sql代替,然后,我使用SqlDataProvider代替SqlDataConnection,看起来:

namespace AggregatorService
打开FSharp.Data.Sql 开放式Deedle 开放系统

模块数据库服务=

[<Literal>]
let connectionString = "Data Source=10.0.40.11;Initial Catalog=nextel_ericsson_umts_brasil;Persist Security Info=True;User ID=sa;Password=****";

type bd = SqlDataProvider<
            ConnectionString = connectionString,
            DatabaseVendor = Common.DatabaseProviderTypes.MSSQLSERVER >

type Database() =

    static member contextDbo() =
        bd.GetDataContext().Dbo

    static member acAgregations() =
        Database.contextDbo().AcAgregations |> Frame.ofRecords

    static member acBusyHourDefinition() =
        Database.contextDbo().AcBusyHourDefinition
        |> Frame.ofRecords
        //|> Frame.getCols["time_agregation_type", "destination_table", "reference_table", "alternative_reference_table_scan", "formula"]

    static member acBusyHourDefinitionFilterByTimeAgregationTipe(value:int) = 
        Database.acBusyHourDefinition()
        |> Frame.indexRowsInt "tome_agregation_type"
        |> Frame.getRows
        |> Frame.filterRowValues( fun row -> row.GetAs<string list>)
[]
让connectionString=“数据源=10.0.40.11;初始目录=nextel\u ericsson\u umts\u brasil;持久安全信息=True;用户ID=sa;密码=****”;
类型bd=SqlDataProvider<
ConnectionString=ConnectionString,
DatabaseVendor=Common.DatabaseProviderTypes.MSSQLSERVER>
类型数据库()=
静态成员contextDbo()=
bd.GetDataContext().Dbo
静态成员acaggregations()=
Database.contextDbo().acaggregations |>Frame.ofRecords
静态成员acBusyHourDefinition()=
Database.contextDbo().AcBusyHourDefinition
|>记录框架
//|>Frame.getCols[“时间/区域/类型”、“目的地/表格”、“参考/表格”、“备选/参考/表格/扫描”、“公式”]
静态成员acbusyhourdefinitionFilterByTimeAgrationTipe(值:int)=
Database.acBusyHourDefinition()
|>Frame.IndexRow为“tome_Agragation_类型”
|>Frame.getRows
|>Frame.filterRowValues(有趣的行->行.GetAs)
正如我所见,这也是同样的道理。我不知道是否有一些不同的预期,但它正在处理我的需要,直到现在