2012-04-14 14 views
6

Estoy intentando conectarme a una base de datos SQL Server Compact Edition desde F # e intento utilizar un proveedor de tipo. Esto está en Visual Studio 11 Beta, así que me doy cuenta de que puede haber un problema por eso, pero creo que es más probable que todavía no tenga el conocimiento.Cómo conectarse a SQL Server Compact Edition 4.0 con un proveedor de tipos en F #?

Sin embargo, me he dado cuenta de que no hay un proveedor de tipos específico CE en Microsoft.FSharp.Data.TypeProviders y no estoy seguro de que una conexión SqlDataConnection regular haga el truco, por lo que ese podría ser el problema.

Sin embargo, cuando trato de crear la conexión, el IDE parece reconocer que estoy tratando de alcanzar una base de datos CE, al menos.

lo tanto, tengo el siguiente código:

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

Así que es bastante estándar, más o menos directamente de la nueva añada de LINQ to SQL con el menú de tipo de elemento del proveedor.

La información sobre herramientas que obtengo sobre la cadena de conexión es "Provider 'System.Data.SqlServerCe.3.5' no instalado." Mirar eso parece indicar que es un problema no tener Sql Server CE instalado, pero tengo las bibliotecas, puedo conectarme a la base de datos usando un SqlCEConnection normal y ejecutando SqlCeCommands y demás. Y dado que es 4.0 y no 3.5, no estoy seguro de si está buscando el proveedor equivocado. Creé la base de datos directamente en VS 11 beta, así que pensé que todas las versiones deberían coincidir y demás.

En resumen, me pregunto si estoy haciendo algo mal, o si las bibliotecas del proveedor de tipo beta VS11 aún no son compatibles con CE 4.0, o si hay algo más que deba hacer para que esto ocurra .

Gracias!

Respuesta

5

Este "funciona en mi máquina" (utilizando VS 11 beta, Entity Framework, basado en el tutorial aquí, 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) 

referencias suplementarias para: FSharp.Data.TypeProviders, System.Data.Entity, System.Data.Linq

+0

No tuve la oportunidad de probar hasta hoy. Eso fue una gran ayuda, ¡así que gracias! También encontré que al menos para el ejemplo simple aquí, no era necesario incluir System.Data.EntityClient. Una sintaxis de consulta más compacta también era simplemente hacer context.Suppliers |> Seq.iter ... etc. – 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

Supongo que eso significa que hay muchas funciones disponibles, pero ¿todavía no está configurando una conexión de datos? Soy totalmente nuevo para escribir proveedores, y de forma justa nuevo para LINQ to SQL (exper orientado con LINQ en general). – McMuttons

Cuestiones relacionadas