F#和ORM工具

时间:2011-01-24 13:19:33

标签: orm f#

我想了解您使用F#和ORM工具的最佳体验。 F#+ LINQ 2 SQL有一些intricacies吗?

1 个答案:

答案 0 :(得分:8)

在当前版本中,对LINQ的F#支持并不像在C#中那样流畅,但它可以很好地使用。我在实现F# Snippets Web时使用了F#+ LINQ to SQL,并且能够使用F#编写几乎所有内容。甚至还有一些很好的功能,你没有在C#中获得。

基本查询的语法基于引用的序列表达式:

let q = <@ seq { for c in db.Customers do
                   if c.Country = "UK" then yield c.Name } @>

F#中的一个好处是你可以使用引用拼接来重构你的代码:

let ukCustomers = 
  <@ seq { for c in db.Customers do 
             if c.Country = "OK" then yield c } @>

// Select names of all UK customers
let q = <@ seq { for c in %ukCustomers -> c.Name }

关于F#支持的限制:

  • 我认为更新没有任何问题(如链接问题所暗示的那样)。

  • 当前版本的最大限制可能是它对查询嵌套的支持有限(例如在Seq.filter循环体内使用for),但这应该是固定的PowerPack的下一个版本(事实上,如果你从源代码编译它,你可能已经得到它了)

  • 如果您可以选择,我建议使用LINQ to SQL而不是LINQ to Entities。 LINQ to Entities对于不可变类型不能很好地工作,因此您无法轻松返回F#记录和F#元组。同样,这可能在未来有所改进(我最近做了一些工作,你可以在F#PowerPack源中找到初步支持)