2012-04-14 14 views
6

Sto tentando di connettersi a un database di SQL Server Compact Edition da F # e di tentare di utilizzare un provider di tipi. Questo è in Visual Studio 11 Beta, quindi mi rendo conto che potrebbe esserci un problema a causa di ciò, ma penso che sia più probabile che io non abbia ancora il know-how.Come connettersi a SQL Server Compact Edition 4.0 con un provider di tipi in F #?

Tuttavia, ho notato che non esiste un provider di tipo CE specifico in Microsoft.FSharp.Data.TypeProviders e non sono sicuro che un normale SqlDataConnection farà il trucco, quindi questo potrebbe essere il problema proprio lì.

Tuttavia, quando provo a creare la connessione, l'IDE sembra riconoscere che sto provando a colpire almeno un database CE.

Così, ho il seguente codice:

type SqlConnection = 
    Microsoft.FSharp.Data.TypeProviders 
    .SqlDataConnection<ConnectionString = @"Data Source=C:\\Path\\Database.sdf"> 
let db = SqlConnection.GetDataContext() 

Quindi è abbastanza standard, più o meno direttamente dal aggiungere nuove LINQ to SQL con menù tipo di elemento provider.

Il suggerimento che ottengo sulla stringa di connessione è "Provider 'System.Data.SqlServerCe.3.5' non installato." Guardando su sembra indicare che è un problema non avendo installato Sql Server CE, ma ho le librerie, sono in grado di connettermi al database usando un regolare SqlCEConnection ed eseguendo SqlCeCommands e così via. E dal momento che è 4.0 e non 3.5, non sono sicuro che stia cercando il provider sbagliato. Ho creato il database proprio in VS 11 beta, quindi stavo pensando che tutte le versioni dovessero corrispondere e così via.

Quindi, in breve, mi chiedo se sto facendo qualcosa di sbagliato, o se le librerie di provider di tipo beta VS11 non supportano ancora CE 4.0, o se c'è qualcos'altro che devo fare per farlo accadere .

Grazie!

risposta

5

Questa "Opere sulla mia macchina" (usando VS 11 beta, Entity Framework, in base alla procedura dettagliata qui, http://msdn.microsoft.com/en-us/library/hh361038(v=vs.110).aspx:

open System.Data.Linq 
open System.Data.EntityClient 
open Microsoft.FSharp.Data.TypeProviders 

let connectionString = "metadata=res://*/;provider=System.Data.SqlServerCe.4.0;provider connection string='data source=C:\\Data\\SQLCE\\Test\\nw40.sdf';" 

type internal edmx = EdmxFile<"NWModel.edmx", ResolutionFolder = @"C:\Users\erik.COMMENTOR\Documents\Visual Studio 11\Projects\TestSqlCeFSharp"> 

let internal context = new edmx.nw40Model.nw40Entities(connectionString) 

query { for supplier in context.Suppliers do 
     select supplier } 
|> Seq.iter (fun supplier -> printfn "%s" supplier.Company_Name) 

riferimenti Aggiunto a: FSharp.Data.TypeProviders, System.Data.Entity, System.Data.Linq

+0

Non ho avuto la possibilità di testare fino ad oggi. E 'stato un grande aiuto, quindi grazie! Ho trovato anche che almeno per il semplice esempio qui, non era necessario includere System.Data.EntityClient. Una sintassi di query più compatta era anche solo fare context.Suppliers |> Seq.iter ... ecc. – McMuttons

2
Supported info of 'System.Data.SqlServerCe.4.0' in Microsoft.FSharp.Data.TypeProviders 
1.SqlDataConnection is not 
2.DbmlFile is partial 
    type dbml = DbmlFile<_> 
    use cn = new SqlCeConnection(...) 
    use db = new dbml.DbContext(cn) 
3.EdmxFile is full 
4.SqlEntityConnection is full 
+0

Quindi suppongo che questo significhi un sacco di funzionalità, ma non è ancora possibile impostare una connessione dati? Sono totalmente nuovo per digitare provider e nuovo a LINQ to SQL (esper ho recitato con LINQ in generale). – McMuttons

Problemi correlati