最完整的ORM支持LINQ?

时间:2009-03-01 21:54:27

标签: sql linq-to-sql orm

我正在寻找能够提供完整或接近完整的LINQ支持的ORM。

LINQ to SQL
- 支持LINQ内部的所有内容(.Contains,Math.Log等)
- 如果不创建新的datacontext,则无法预先加载关系属性

ADO.NET实体框架
- 可怕的LINQ支持(许多缺少的功能) - 出色的地图功能 - 可以在ObjectQuery<>

上使用.Include方法按需加载

光速
- 很棒的LINQ支持缺少一些功能(.Contains在where中)
- 生成的一些SQL非常低效。

这些似乎都不完美,我真的希望我可以从每个中获取点点滴滴。我个人非常喜欢ADO.NET EF,除了它缺少的功能使它使用起来很令人沮丧。

我知道有些人会赞美NHibernate而且我不会敲它但是我今天花了很多时间尝试它并且没关系但它的LINQ支持并不是那么好。

10 个答案:

答案 0 :(得分:5)

尝试使用DataObjects.NET。 我是DO开发人员之一。我在该项目中的最新活动是实现LINQ for DataObjects。所以我可以简单地描述一下:

  • 支持几乎所有LINQ方法,除了Last / LastOrDefault / Aggregate / Reverse / TakeWhile / SkipWhile等以及具有.NET特定参数的方法 - 例如IComparer(nobody支持它们)。
  • 几乎支持所有字符串和数学方法(并且您可以编写自己的函数映射!)。
  • GroupBy \ SelectMany \包含\ Single \ etc的复杂场景。在子查询和相关子查询中受支持。

我们有大约1000次LINQ实施测试,其中99%都通过了。所以我可以说当前的实现接近于EF。有些方法不适用于EF,有些方法适用于我们的框架。 查看此简要说明http://www.x-tensive.com/Products/DO/

答案 1 :(得分:4)

Llblgen似乎有很好的linq支持。弗兰斯有一系列关于他的发展的博客帖子http://weblogs.asp.net/fbouma/archive/2007/09/11/developing-linq-to-llblgen-pro-day-0.aspx

答案 2 :(得分:3)

答案 3 :(得分:2)

DataObjects.Net几乎完全支持LINQ。

答案 4 :(得分:2)

最新版本的SubSonic已经被Linq的使用重新改写 - http://subsonicproject.com/docs/3.0_Summary

答案 5 :(得分:0)

我和EF有同样的问题。我想将它用于映射,但由于缺乏良好的linq支持而退出它。

我不确定你的意思是热切的负载关系属性,但是你可以用普通的linq-2-sql来加载。

您使用LoadOptions.LoadWith<T>(expression).

答案 6 :(得分:0)

Signum Framework有一个linq提供程序http://www.signumframework.com/DatabaseQuery.ashx,并且具有完全不同的加载权限的方式。没有datacontext。

它只适用于新应用程序。

答案 7 :(得分:0)

NHibernate与Linq到NHibernate

答案 8 :(得分:0)

Genome

  

Genome O / RM使用LINQ生成数据访问层,将关联数据库系统(如Microsoft SQL Server,Oracle和IBM DB2)连接到.NET企业应用程序。

答案 9 :(得分:0)

EntityFramework 5.0虽然缺乏copiprison和nhibernate的一些功能,但它们缺乏一些功能,但是对于LINQ的支持,它比nhibernate要好得多。 Nhibernate具有SessionFactory和Session的概念,而entityframework具有DbContext的概念,类似于nhibernate的会话,但更容易设置和管理,您可以连接到许多数据库,您只需要为每个数据库定义DbContext和实例化SpecificDbContext,以便针对特定数据库开始和编写LINQ查询。