对于f#与数据库交谈,我假设您转向一些看起来非常像C#代码的代码,使用一些.NET库(例如ado.net)和相当多的命令式代码,根据定义,相当多的副作用..
或者我在这里遗漏了什么? F#在这个领域也有一些美丽吗?
有人会非常友好地为我提供一个阅读写作数据库的例子吗?
答案 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
根据您使用的数据库,您可能会得到一些其他选择,但从相当实用的功能开始,您可以在获得经验时对其进行改进。