如何使用F#中的类型提供程序连接到SQL Server Compact Edition 4.0?

McM*_*ons 6 f# sql-server-ce type-providers

我正在尝试从F#连接到SQL Server Compact Edition数据库,并尝试使用类型提供程序.这是在Visual Studio 11 Beta中,所以我意识到可能存在一个问题,但我认为我更有可能还没有这方面的技术诀窍.

但是,我注意到Microsoft.FSharp.Data.TypeProviders中没有特定于CE的类型提供程序,我不确定常规SqlDataConnection是否可以解决问题,因此可能就是问题所在.

但是,当我尝试创建连接时,IDE似乎认识到我至少要尝试访问CE数据库.

所以,我有以下代码:

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

所以它非常标准,或多或少直接添加新的LINQ to SQL类型提供程序项菜单.

我在连接字符串上找到的工具提示是"Provider'System.Data.SqlServerCe.3.5'未安装." 看起来似乎表明它没有安装Sql Server CE是一个问题,但我有了库,能够使用常规SqlCEConnection连接到数据库并运行SqlCeCommands等.而且由于它是4.0而不是3.5,我不确定它是否正在寻找错误的提供商.我在VS 11 beta中创建了数据库,因此我认为所有版本都应该匹配等等.

简而言之,我想知道我做错了什么,或者VS11 beta类型提供程序库是否还不支持CE 4.0,或者我还需要做些什么来实现它.

谢谢!

Eri*_*kEJ 5

这个"在我的机器上运行"(使用VS 11 beta,实体框架,基于此处的演练,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)
Run Code Online (Sandbox Code Playgroud)

添加了对以下内容的引用:FSharp.Data.TypeProviders,System.Data.Entity,System.Data.Linq