2016-07-28 15 views
1

Ich verwende mono auf Linux, einen F # Code für den Zugriff auf eine SQL Server-Datenbank. Ich benutze SqlDataConnection.Kompilieren mit SqlDataConnection in F # auf Mono in Linux

Mein Code ist folgende:

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 

ich diesen Code nicht kompiliert werden kann. Ich erhalte diese ärgerlichen Fehler:

The type provider 'FSharp.Data.TypeProvider.DesignTime.DataProviders' reported an error reading schema. No access to the given key (FIS3033)

Meine package.config Datei ist:

<?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> 

AC# Programm ist aus dem gleichen Computer anschließen, so, ich denke, das Problem ist nicht mit Mono-Konfigurationen oder in einer Linux-Maschine sein.

Jeder hat eine Lösung oder einen Tipp, wie man das löst?

+0

Ich benutze Mono –

Antwort

2

Leider sieht es mono ist nicht in der Lage, dieses Paket so gut zu tun, ich wünsche. Bei der Suche habe ich festgestellt, dass es einen Fehler von vor zwei Jahren gibt, aber ich finde noch keine Lösung.

Was ich, dass verlassen tue verwendet FSharp.Data.Sql statt, dann verwende ich SqlDataProvider statt SqlDataConnection, ow es aussieht:

namespace AggregatorService 

offen FSharp.Data .SQL offen Deedle offen System.Linq

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

Wie ich sehe, funktioniert das genauso. Ich weiß nicht, ob ein Unterschied zu erwarten ist, aber es geht bis jetzt um meine Bedürfnisse.