F#数据库编程与C#数据库编程相同吗?

时间:2009-11-26 07:23:08

标签: database f#

对于f#与数据库交谈,我假设您转向一些看起来非常像C#代码的代码,使用一些.NET库(例如ado.net)和相当多的命令式代码,根据定义,相当多的副作用..

或者我在这里遗漏了什么? F#在这个领域也有一些美丽吗?

有人会非常友好地为我提供一个阅读写作数据库的例子吗?

2 个答案:

答案 0 :(得分:4)

当我需要在测试项目中从F#进行一些数据库访问时,我最终使用了来自F#的LINQ to SQL。我刚刚在解决方案中添加了一个C#项目,将DataContext放在C#项目中,并在我的F#项目中使用生成的C#LINQ to SQL类。

首先,您需要引用程序集FSharp.PowerPack and FSharp.PowerPack.Linq。然后你可以open Microsoft.FSharp.Linq

这是一个从XDocument中解析“Site”标签的示例,创建Site类的实例(C#生成LINQ to SQL类),然后使用L2S数据上下文将它们插入数据库。 / p>

let sites = doc.Descendants(ns + "Site")
            |> Seq.map (fun el -> new Site (
                                      Url = xstr(el.Element(ns + "DataUrl")),
                                      Rank = xint(el.Element(ns + "Rank"))
                                  ))
use db = new SomeDataContext()
db.Sites.InsertAllOnSubmit(sites)
db.SubmitChanges()

正如您所看到的,即使它使用的是C#类,也不是完全必要的代码。

以下是使用F#版LINQ查找数据库中所有站点条目的最大排名的示例。是的,这确实被转换为SQL并在数据库中执行。

use db = new SomeDataContext()
Query.query <@ seq { for s in db.Sites -> s.Rank } |> Seq.max @>

最后,这里有一些more information on LINQ with F#

答案 1 :(得分:2)

您可能希望在此问题中使用已接受的答案作为一个很好的起点。

F# Beginner: retrieving an array of data from a server

根据您使用的数据库,您可能会得到一些其他选择,但从相当实用的功能开始,您可以在获得经验时对其进行改进。