我正在尝试从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()

因此,这是非常标准的,或多或少直接从使用类型提供程序项目菜单向SQL添加新的LINQ来实现。

我通过连接字符串获得的工具提示是“未安装提供程序'System.Data.SqlServerCe.3.5'”。查找该内容似乎表明未安装Sql Server CE是一个问题,但是我拥有这些库,能够使用常规SqlCEConnection连接到数据库并运行SqlCeCommands等。而且由于它是4.0而不是3.5,所以我不确定它是否在寻找错误的提供程序。我是在VS 11 beta中创建数据库的,所以我想所有版本都应该匹配。

简而言之,我想知道我是在做错什么,还是VS11 beta类型提供程序库还不支持CE 4.0,或者是否需要做一些其他事情才能使其实现。

谢谢!

最佳答案

此“在我的机器上工作”(使用VS 11 beta, Entity Framework ,基于此处的演练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)

添加了对以下内容的引用:
FSharp.Data.TypeProviders,
System.Data.Entity,
系统数据

关于f# - 如何使用F#中的类型提供程序连接到SQL Server Compact Edition 4.0?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10154849/

10-09 18:42