ORM框架

5

我需要收集一些关于现有ORM解决方案的信息。请随意讨论任何编程语言。

你能谈谈你使用过的最好的ORM框架,以及为什么它比其他框架更好吗?


1
除了在 .net 中,没有所谓的“语言无关”的 ORM(即使在 .net 中,它也只能用于 .net 语言)。 - Nir
谢谢大家, 我真的没有说出我的意思。 - Bogdan Gusiev
这个问题非常模糊和主观,我很想将其设为协作编辑模式...你有什么想法吗? - Marc Gravell
Bogdan,请提供一些关于你正在使用的技术,比如编程语言和数据库的更多细节。 - Daniel Auger
要么更具体,要么将其作为社区维基。我建议后者,因为看起来Bogdan并没有寻找任何具体的东西。 - Sasha Chedygov
nHibernate是.NET开发中最好的ORM工具。我使用过3种不同的工具,总是将它们与nHibernate进行比较。 - D3vtr0n
6个回答

6

我曾使用过 NHibernate 和 Entity Framework。

当前稳定版本的 Entity Framework 还很不成熟。它太难或者说不可能完成一些常见的任务。测试代码也很困难,因为你无法真正地将实体与数据访问类分开。但是它能够完美地集成到 Visual Studio IDE 中。设置非常容易,从数据库更新所有模型只需几秒钟。即将推出的 EF (4.0)将解决其中一些问题。

NHibernate 很强大。它支持 plain old CLR objects ,因此你可以处理简单的实体。配置提供了非常详细的控制。框架功能令人满意,拥有庞大和活跃的社区以及良好的文档。设置和更新实体有点困难,因为你必须使用生成器来查找你的数据库并生成实体和 XML 文件。可能会很难找到完全符合你需要的生成器或模板。但是一旦你设置好所有东西,你就会喜欢它。


3
我发现LINQ to SQL是一个相当简单直接的解决方案。第一次使用它时,我可以说几个小时内就创建了一个基本的ORM,并且可以使用它创建LINQ查询。
微软还有另外一个ORM(Entity Framework),据说更加复杂,但对于具有多个数据源等高度复杂分布式应用程序可能会有用。
总体而言,我发现LINQ是一个易于使用和快速的ORM。

2

我过去几个月一直在研究Telerik Open Access,总的来说这个ORM的使用非常麻烦。它宣传具有广泛的linq支持,但实际上,你通常期望的许多linq功能在服务器端不起作用,并在客户端执行。我还在使用where子句中遇到了多个条件的问题,请查看我的上一个问题。以下是我发现的一些问题:

  • 不支持视图
  • 无法将多个实体映射到同一张表
  • 继承和接口支持需要对数据库模式进行更改
  • 没有像LINQ to SQL和Entity Framework那样的可视化设计工具
  • 如果要执行插入操作,则必须首先获取任何相关实体

Rohan


1
仅供参考,我认为这篇关于OpenAccess ORM的评论已经过时且不准确。OpenAccess具有完整的LINQ支持,与其他.NET ORM相当,拥有丰富的可视化设计工具,以及对视图、存储过程等功能的支持,超越了EF和NH等系统(例如Domain Service Wizard)。我鼓励您查看最新版本,以获得更准确的比较:http://www.telerik.com/products/orm.aspx - Todd
2
你意识到这是在2009年写的吗? - Rohan West

1

LINQ2SQL很好,EF很有意义,但非常复杂且面向SQL Server。NHibernate很特别,而Telerik OpenAccess(完全.NET / Visual Studio)具有广泛的功能和专业支持。

由于我了解该产品,因此可以评论Rohan的担忧:

  • 现有视图可以使用,并且全面支持视图即将推出
  • 将多个实体映射到同一表格对于类层次结构“有效”,但存在反向映射的限制
  • 继承和接口支持“不需要”更改数据库模式,尽管存在反向映射的限制
  • 可视化设计师将会出现,正向和反向映射向导已经允许您以简单的方式完成任何操作
  • 有一个解决插入问题的解决方法,并且通常会进行修复

请查看Telerik网站以找到满意的客户,并随时使用telerik论坛和支持资源提出任何问题。

-Peter


1
你显然是Telerik的销售人员。我也使用过Telerik OpenAccess ORM,但不会推荐给我的最坏的敌人。ORM身份验证需要TCP/IP。我无法构建客户端发布版本,因为ORM需要访问服务器的TCP/IP。这不好,因为它迫使我现场进行构建。如果您知道在网络之外构建部署包的另一种方法,请告诉我。否则,请使用nHibernate。我真的强烈推荐nHibernate,它比我以前使用过的任何其他东西都要好。 - D3vtr0n
清理记录,Devtron,我认为这篇评论是基于一个非常旧的OpenAccess ORM版本。所有当前版本都支持SQL Server通信的所有方法(TCP/IP、命名管道、内存)。开箱即用的驱动程序支持超过了NHibernate所提供的。请查看最新版本以获取最新的视图:http://www.telerik.com/products/orm.aspx - Todd

0

使用ORM有多种可能性,一切取决于你想要什么。

作为一个真正的ORM映射器,我强烈推荐NHibernateFluent NH映射。你需要进行大量的研究来构建一个好的架构,但是一旦完成,就没有任何阻碍了。只需最小的妥协,你就可以获得真正的灵活性。

EF6x(核心版本不够成熟)被称为ORM,但它生成的更接近于数据访问层(DAL)。有些事情你不能用EF6有效地完成。尽管如此,这仍然是我用于读模型的最喜欢的工具,同时我会将其与NHibernate结合使用(其中NH我用于DDD/写模型)。

现在来谈谈性能 - 总是有利有弊。如果你深入研究ORM架构(请参阅我的文章:避免ORM的坏习惯),那么你会直观地发现如何使它更快。这是我另一篇关于如何使EF6x 5x 更快(至少对于读取情况)的文章:EF6.x 5x faster


0

我是OpenAccess ORM的新手,我们正在使用两个产品:Reporting和OpenAccess。我认为有些功能被人们忽略了。

  1. OpenAccess使用图形化设计工具,而nHibernate仍然使用手写的xml文件
  2. OpenAccess不像EF4和类似框架一样局限于SQL Server

使用它更容易,论坛也非常有帮助。


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