我正在尝试使用ORM工具转移到并将其缩小为两个候选人。
nHibernate 或 LLBLGen Pro
请你们给我使用这两种工具的优点和缺点,特别是如果你有这方面的经验。我对其他任何工具都不感兴趣,但我想要一些提醒,所以我可以决定花时间学习哪种工具....
我已经知道一个是免费的,一个是免费的,我也知道nHibernate可能需要一些学习......
非常感谢,理查德
答案 0 :(得分:34)
我用过两者。起初我在nHibernate上卖掉了,即使我知道其他选项,也拒绝尝试其他任何选择。
对于LLBLGen Pro,我持怀疑态度,但很快也看到了优势。我还没有完全抛弃nHibernate。我将继续在我的“工具箱”中保留int。我发现LLBLGen在某些情况下很有用,特别是在与已经存在的数据库进行交互时,您无法重新设计它。从数据库生成我的LLBLGen实体对象需要不到一个小时(当然,这取决于数据库的大小),而不是必须使用nHibernate手动编写所有这些对象,并执行映射。 nHibernate缺少一个很好的图形界面来创建映射。当数据库庞大且需要在应用程序中访问的数千个表时,这一事实变得更加重要。
尽管LLBLGen更像是一个数据访问层生成器(而且我通常不是DAL生成器的粉丝),但它具有许多“真正的ORM”工具所具有的功能。在我看来,它拥有两全其美。一旦你开始使用它,你就会开始意识到它非常灵活和可扩展。我喜欢的一个部分是我可以为生成的实体对象创建部分类,我可以在其中编写业务逻辑代码,以及验证。
代码生成是模板化的,因此您可以完全控制它生成的代码。有了nHibernate,我发现自己一遍又一遍地编写了一些相同类型的代码。使用LLBLGen,我可以生成它并专注于业务逻辑并更快地发布。
对于刚刚开始使用ORM类型工具的人,我真的建议从LLBLGen开始,因为nHibernate可能会让人不知所措。最后,您将获得相同的结果(或多或少)。
编辑#1: LLBLGen现在也对LINQ提供100%的支持。 (因此,如果您因此而喜欢LINQ to SQL),LLBLGen可以支持许多数据库,其中LINQ to SQL仅适用于Microsoft SQL数据库。
编辑#2: According to Graviton您可以使用CodeSmith为nHibernate执行一些代码生成。这真的很酷,但对于ORM的新手,我仍然会推荐LLBLGen。对我来说,添加更多依赖关系,LLBLGen将其全部包含在一个包中。就像我之前说的那样,学习曲线不那么陡峭,你会得到同样的好处,如果你决定去那里,这也有助于你轻松进入nHibernate。
答案 1 :(得分:20)
主要区别在于LLBLGen是一个代码生成器,而NHibernate是一个“真正的”ORM库。
LLBLGen优势:
LLBLGen缺点:
NHibernate优势:
NHibernate缺点:
当然,这只是我个人的观点......
答案 2 :(得分:8)
在我意识到这是一个有点老问题之前,我打了一个相当长的答案。那好吧。它仍然非常相关。
您已将列表缩小为.NET世界中ORM的两个最佳候选者。我对这两者的经验都很有限,但我已经广泛阅读了两者的优点和缺点。他们真的以不同的方式满足不同的需求。
在即将推出的LLBLGen Pro 3.0中,Frans Bouma谈到了添加生成NHibernate映射的功能。所以,它甚至不一定是一个/或决定。
如果你想做“第一级”设计(而不是“数据库优先”设计),NHibernate现在几乎是你最好的选择(LLBLGen Pro和实体框架都不支持这种模式,虽然它听起来像实体框架正在改进它在下一版本中的支持。)
NHibernate和LLBLGen Pro都努力工作,与您无法改变和不得不忍受的遗留数据库一起工作。这是他们的共同力量。他们都和Linq一起工作。它们都支持一定数量的图形建模,尽管LLBLGen Pro在这方面要优越得多(ActiveWriter for NHibernate感觉就像Visual Studio中的LinqToSql设计器,但它并不像功能丰富的那样。)
LLBLGen Pro具有更强大的代码生成能力,但过多的代码生成可能导致可测试性和可维护性受损(一个小的调整可能导致大量代码需要重新测试)。
虽然NHibernate希望帮助您完成相当复杂的对象/关系映射方案(如类继承),但LLBLGen Pro实际上只是以快速的方式将数据库公开为数据层和业务对象。
如果您可以购买LLBLGen Pro并且有时间,我会尝试两者,看看哪一个更符合您的需求。在任何情况下,学习两个ORM对你的简历都有好处。
所以,最后,我会说它是情境性的。 NHibernate的成本及其缺乏严重缺陷在大多数情况下都是一个非常引人注目的案例。
答案 3 :(得分:6)
新版本的LLBLGen Pro(3.0)允许您为NHibernate生成代码,因此不必选择:)。它还允许您将实体拆分为不同的域。
我仍然更喜欢LLBLGen pro运行时,LINQ解释器更完整,它有更好的字段更改跟踪。
不幸的是,新的LLBLGen Pro 3.0运行时没有太多新功能,因为创建者首先想要更多地关注工具而不是改进现有框架。
答案 4 :(得分:3)
我使用了nHibernate,LLBLGen Pro,来自我的咨询公司,企业库和LINQ的自定义数据层。 LLBLGen是我最喜欢的,它允许编写一个业务层,可以使用相同的代码与不同类型的数据库通信,提供数据库独立性!另一个不可思议的功能是它允许多个连接到不同的数据库。这在大型公司中非常有用,并且一个系统是用Sql Server编写的,而另一个系统是在Oracle中连接的。
LLBLGen Pro是一款令人惊叹的产品,由Frans提供支持,他非常活跃并且努力解决问题。 LLBLGen就像PhotoShop,它是一个令人难以置信的工具,可以在知道如何使用的人手中做出惊人的效果。就像任何节省大量时间的工具一样,学习如何使用它需要一到两周的时间,但会在几个月后节省您的项目。
它不仅加快了我的应用程序的DAL生成方面,还可以轻松地在业务层中创建查询并发送到表示层。它使创建企业类应用程序变得容易。
如果真的想要使用nHibernate,请从LLBLGen Pro开始并生成nHibernate代码。如果您的部门稍后决定从nHibernate切换到LINQ,那么您将受到保护。想从Sql Server切换到Oracle?使用LLBLGen这是可能且相对容易的,而使用手动编码的nHibernate代码,您必须重写几乎不可能成本合理的所有内容。
Frans也可以回答我的一些问题。
答案 5 :(得分:2)
不要忘记Hibernate最大的优点之一:HQL。使用HQL,您的SQL技能不会浪费。 Hibernate也为本机查询提供了非常好的无缝支持。 如果您有一些奇怪的,不合标准的数据库,几乎可以肯定您在某些时候需要您的SQL技能,并且祝LLBL好运!
答案 6 :(得分:2)
对我而言,它归结为以数据库为中心(LLBLGen Pro)与以域模型为中心(NHibernate)。
由于我是DDD / OO家伙,我的选择一直很容易,但我确实知道为什么LLBLGen Pro很受欢迎。
答案 7 :(得分:1)
我们在工作中使用LLBLGen,并且它受到谴责 - 因为我们有多个类似的模式,但是你需要为每个模式使用不同的DLL /类库,这意味着编写可以针对任何模式的代码会很烦人
当然,这是一个不寻常的环境,所以它可能不适用于你。