F#和ORM工具

nap*_*nss 1 orm f#

我想知道您使用F#和ORM工具的最佳体验.F#+ LINQ 2 SQL有一些复杂性吗?

Tom*_*cek 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 } @>
Run Code Online (Sandbox Code Playgroud)

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 }
Run Code Online (Sandbox Code Playgroud)

关于F#支持的局限性:

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

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

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