2016-07-28 52 views
1

我在Linux上使用單聲道,因此使用F#訪問SQL Server數據庫的代碼爲。我正在使用SqlDataConnection無法在Linux上使用Mono中的F#編寫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 

我不能編譯的代碼。我得到這個惱人的錯誤:

The type provider 'FSharp.Data.TypeProvider.DesignTime.DataProviders' reported an error reading schema. No access to the given key (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#程序是從同一臺計算機連接,所以,我覺得問題不在於單配置或在Linux機器上。

任何人有解決方案或提示如何解決?

+0

我正在使用單聲道 –

回答

2

不幸的是它看起來單聲道不能處理這個包,以及我希望。搜索我發現兩年前有一個bug,但我還沒有找到任何解決方案。

我在做什麼離開正在使用FSharp.Data.Sql代替,然後,我用的的SqlDataProvider代替SqlDataConnection,嗷嗷它看起來:

namespace AggregatorService 

開放FSharp.Data .SQL 開放Deedle 開放System.Linq的

模塊DatabaseService =

[<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>) 

正如我所看到的,它的工作原理是一樣的。我不知道是否有一些預期的差異,但它直到現在正在處理我的需求。