26

我正在尝试使用 ORM 工具移动到并将其缩小到两个候选人。

nHibernateLLBLGen Pro

请你们给我使用这两种工具的优缺点,特别是如果你有这两种工具的经验的话。我对任何其他工具并不真正感兴趣,但我想要一些提醒,以便我可以决定花时间学习哪个工具......

我已经知道一个是免费的,一个不是,我也知道 nHibernate 可能需要一些学习....

非常感谢,理查德

4

8 回答 8

34

我都用过。起初,我在 nHibernate 上被出售并且拒绝尝试其他任何东西,即使我知道其他选择。

对于 LLBLGen Pro,我持怀疑态度,但很快也看到了优势。我还没有完全放弃 nHibernate。我将继续将 int 保存在我的“工具箱”中。我发现 LLBLGen 在某些情况下很有用,尤其是在与已经存在的数据库交互并且您别无选择重新设计它时。从数据库生成我的 LLBLGen 实体对象需要不到一个小时(当然取决于数据库的大小),而不是必须使用 nHibernate 手动编写所有代码并进行映射。nHibernate 缺少一个很好的图形界面来创建映射。当数据库庞大且您需要在应用程序中可能访问的数千个表时,这一事实变得更加重要。

尽管 LLBLGen 更像是一个数据访问层生成器(而且我通常不是 DAL 生成器的粉丝),但它具有许多“真正的 ORM”工具应该具备的功能。在我看来,它是两全其美的。一旦开始使用它,您就会开始意识到它非常灵活和可扩展。我非常喜欢的一个部分是,我可以为生成的实体对象创建部分类,我可以在其中编写业务逻辑以及验证代码。

代码生成是模板化的,因此您可以完全控制它生成的代码。使用 nHibernate,我发现自己一遍又一遍地编写一些相同类型的代码。使用 LLBLGen,我可以生成它并更快地专注于业务逻辑和问题。

对于刚开始使用 ORM 类型工具的人,我真的建议从 LLBLGen 开始,因为 nHibernate 可能会让人不知所措。最后,您将获得相同的结果(或多或少)。

编辑 #1: LLBLGen 现在也 100% 支持 LINQ。(因此,如果您因此喜欢 LINQ to SQL)进一步的 LLBLGen 可以支持许多数据库,其中 LINQ to SQL 仅适用于 Microsoft SQL 数据库。

编辑#2: 根据 Graviton,您可以使用 CodeSmith 为 nHibernate 生成一些代码。这真的很酷,但对于 ORM 的新手,我仍然会推荐 LLBLGen。对我来说,这是添加更多的依赖项,LLBLGen 将所有这些都集中在一个包中。就像我之前说的那样,学习曲线不那么陡峭,您将获得相同的好处,如果您决定去那里,这也将帮助您轻松适应 nHibernate。

于 2009-07-12T22:42:24.797 回答
20

主要区别在于 LLBLGen 是一个代码生成器,而 NHibernate 是一个“真正的” ORM 库。

LLBLGen 优势

  • 易于使用的模型设计器。可以导入您现有的数据库架构
  • 全类型对象模型和查询语言

LLBLGen 缺点

  • 您需要设计器应用程序来更改您的模型
  • 不是免费的
  • 可能会使您的代码膨胀,因为会生成大量代码

NHibernate 优势

  • 无需设计器应用程序。只有代码
  • 广泛使用(基于最流行的Java ORM,Hibernate)
  • 非常强大的映射任何你能想象的数据模型
  • 开源

NHibernate 的缺点

  • 很难学
  • 不像人们想要的那样强类型(尤其是查询)

当然,这只是我个人的观点……

于 2009-07-11T17:39:49.423 回答
8

在意识到这是一个有点老的问题之前,我输入了一个相当长的答案。那好吧。它仍然非常相关。

您已将列表缩小到 .NET 世界中 ORM 的两个最佳候选者。我对两者的经验都有限,但我已经广泛阅读了两者的优缺点。它们确实以不同的方式满足了不同的需求。

在即将发布的 LLBLGen Pro 3.0 中,Frans Bouma 谈到了添加功能来生成 NHibernate 映射。因此,这甚至不一定是非此即彼的决定。

如果你想做“类优先”设计(而不是“数据库优先”设计),NHibernate 几乎是你现在最好的唯一选择(LLBLGen Pro 和 Entity Framework 都不支持这种模式,尽管听起来 Entity Framework 是在下一个版本中改进它的支持)。

NHibernate 和 LLBLGen Pro 都努力与您无法更改且必须忍受的遗留数据库一起工作。那是他们共同的力量。他们都与 Linq 一起工作。它们都支持一定数量的图形建模,虽然 LLBLGen Pro 在这方面要优越得多(NHibernate的 ActiveWriter 感觉就像 Visual Studio 中的 LinqToSql 设计器,但它的功能并不丰富)。

LLBLGen Pro 具有更强大的代码生成能力,但过多的代码生成会导致可测试性和可维护性受损(一个小的调整可能会导致大量代码需要重新测试)。

虽然 NHibernate 希望帮助您处理相当复杂的对象/关系映射场景,例如类继承,但 LLBLGen Pro 实际上只是以非常快速的方式将您的数据库公开为数据层和业务对象。

如果您可以购买 LLBLGen Pro 并有一些时间,我会尝试两者,看看哪一个更能满足您的需求。无论如何,学习这两种 ORM 对你的简历都有好处。

所以,最后,我会说这是情境性的。在大多数情况下,NHibernate 的成本及其缺乏严重缺陷的情况非常令人信服。

于 2009-09-18T07:21:26.447 回答
6

新版本的 LLBLGen Pro (3.0) 允许您为 NHibernate 生成代码,因此不必选择:)。它还允许您将实体拆分为不同的域。

不过,我仍然更喜欢 LLBLGen pro 运行时,LINQ 解释器更完整,并且具有更好的字段更改跟踪。

不幸的是,新的 LLBLGen Pro 3.0 运行时没有太多新功能,因为创建者首先希望更多地关注工具而不是改进现有框架。

于 2010-07-01T13:51:12.440 回答
3

我使用了 nHibernate、LLBLGen Pro、来自我的咨询公司的自定义数据层、Enterprise Library 和 LINQ。LLBLGen 是迄今为止我最喜欢的,它允许编写一个业务层,该业务层可以使用相同的代码与不同类型的数据库通信,从而提供数据库独立性!另一个令人难以置信的功能是它允许多个连接到不同的数据库。这在大型公司中非常有用,其中一个系统是用 Sql Server 编写的,而您必须与之交互的另一个系统是在 Oracle 中。

LLBLGen Pro 是一款由 Frans 支持的令人惊叹的产品,Frans 非常活跃并努力解决问题。LLBLGen 就像 PhotoShop,它是一个令人难以置信的工具,并且可以在知道如何使用的人手中产生惊人的效果。就像任何可以节省大量时间的工具一样,学习如何使用它需要一到两周的时间,但会在以后的项目中节省几个月的时间。

它不仅加快了我的应用程序的 DAL 生成速度,而且还很容易在业务层中创建查询并发送到表示层。它使创建企业级应用程序变得容易。

如果真的想使用 nHibernate,请从 LLBLGen Pro 开始并生成 nHibernate 代码。如果稍后您的部门决定从 nHibernate 切换到 LINQ,那么您将得到保障。想从 Sql Server 切换到 Oracle?使用 LLBLGen 这是可能的并且相对容易,而使用手动编码的 nHibernate 代码,您必须重写几乎不可能成本合理的所有内容。

Frans 也有空并回答了我的一些问题。

于 2011-08-29T22:26:47.423 回答
2

不要忘记 Hibernate 的最大优点之一:HQL。使用 HQL,不会浪费您的 SQL 技能。Hibernate 也为原生查询提供了非常好的、无缝的支持。如果你有一些奇怪的、不符合标准的数据库,几乎可以肯定你在某些时候需要你的 SQL 技能,祝你好运!

于 2009-09-18T03:48:47.110 回答
2

对我来说,它归结为以数据库为中心(LLBLGen Pro)与以域模型为中心(NHibernate)。

因为我是一个 DDD/OO 人,所以选择对我来说一直很容易,但我明白为什么 LLBLGen Pro 很受欢迎。

于 2010-06-02T14:46:24.753 回答
1

我们在工作中使用 LLBLGen,但它受到了谴责——即因为我们有多个相似的模式,但是您需要为每个模式拥有不同的 DLL/类库,这意味着编写可以针对任何模式的代码变得很烦人。

当然,这是一个不寻常的环境,因此可能不适用于您。

于 2009-09-16T21:02:42.477 回答