2012-04-14 66 views
6

我正试图从F#连接到SQL Server Compact Edition数据库,并尝试使用类型提供程序。这是在Visual Studio 11 Beta中,所以我意识到可能会有一个问题,因为这一点,但我认为我更可能还没有专有技术。如何使用F#中的类型提供程序连接到SQL Server Compact Edition 4.0?

但是,我注意到在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() 

所以这是非常标准的,或多或少直出的添加新的LINQ型供应商项目菜单中的SQL。

我通过连接字符串获得的工具提示是“Provider'System.Data.SqlServerCe.3.5'not installed。”看起来似乎表明这是没有安装Sql Server CE的问题,但是我有了库,能够使用常规的SqlCEConnection连接到数据库并运行SqlCeCommands等。由于它是4.0而不是3.5,我不确定它是否在寻找错误的提供者。我在VS 11测试版中创建了数据库,所以我认为所有版本都应该匹配。

所以简而言之,我想知道如果我做错了什么,或者如果VS11 beta类型提供程序库还不支持CE 4.0,或者如果还有其他事情需要我去做。

谢谢!

回答

5

这 “作品在我的机器”(使用VS 11测试版,实体框架的基础上,这里的演练,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, System.Data.Linq

+0

直到今天还没有机会测试。这是一个巨大的帮助,所以谢谢!我还发现,至少在这里的简单例子中,没有必要包含System.Data.EntityClient。一个更紧凑的查询语法也只是做context.Suppliers |> Seq.iter ...等 – McMuttons 2012-05-09 13:04:58

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

所以我想这意味着一堆功能在那里,但建立一个数据连接还没有?我是完全陌生的键入提供商,并公平LINQ to SQL(exper一般情况下,使用LINQ)。 – McMuttons 2012-04-18 13:04:17

相关问题