F#数据库编程和C#数据库编程是否相同?

4

为了让F#连接到数据库,我想你需要编写一些非常类似于C#代码的代码,使用一些.NET库(例如ado.net),并且大量使用命令式代码,其定义中具有相当多的副作用。

或者我理解错了吗?在这个领域中,F#是否也有一些美妙之处呢?

请问有人可以提供一个读取和写入数据库的示例吗?


9
不,它高半个八度。 :) - cletus
2个回答

4
当我在测试项目中需要进行一些F#数据库访问时,最终我使用了从F#中的LINQ to SQL。我只是将一个C#项目添加到解决方案中,在C#项目中放置了DataContext,并在我的F#项目中使用生成的C# LINQ to SQL类。
首先,您需要引用FSharp.PowerPack和FSharp.PowerPack.Linq程序集。然后您可以open Microsoft.FSharp.Linq
这是一个示例,它从XDocument中解析出“Site”标签,创建 Site 类的实例(一个由C#生成的LINQ to SQL类),然后使用L2S数据上下文将它们插入数据库。
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 @>

最后,这里有一些关于使用 F# 进行 LINQ 的更多信息


2

你可能希望使用这个问题中被接受的答案作为一个很好的起点。

F#初学者:从服务器检索数据数组

根据你使用的数据库,你可能会得到其他选择,但是从一些相对功能较强的东西开始,并且随着经验的积累可以不断改进它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接