问题 nhibernate有什么,缺少实体框架4?


我们试图决定是否值得在项目中使用实体框架4。为此,我认为一个好的起点是将它与nhibernate进行比较,nhibernate已经成熟并经过多年的使用证明拥有人们对企业应用程序所需的所有功能,并找出nHibernate缺少EF4的功能出去。

首先,我的知识有限:

  • 缓存:nhib有L2缓存,而EF4缓存不好(?)
  • nHibernate为大多数数据库提供了提供程序,而EF需要非sql数据库的插件
  • nHib更快/更优化
  • nHib有扩展点(例如自定义字段类型)
  • ... 还有什么?

找到一些文章:

http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases-Part2.aspx


4997
2017-10-13 00:26


起源

<personalOpinion>我个人认为NHibernate的灵活性和可扩展性使其成为卓越的产品。看起来你可以弯曲NH来为你做比EF更多的事情。只是我的2c ...... </ personalOpinion> - Aren
Aren,不需要害羞,这是添加到列表中的完全有效的东西! - Chris
这应该是一个CWiki,因为它是主观的(对EF的粉丝和NHibernate的粉丝)。并且很可能会爆发出“哪个更好”的论点。 - RPM1984
可能重复 实体框架4与NHibernate - Mauricio Scheffer
问题重新措辞,所以它不是一个骗局 - Chris


答案:


我在第一次出现时尝试了实体框架,并且在做任何非标准的事情时(我发现任何现实应用程序,事情并不像示例那样完美),我发现配置过于复杂。使用nhibernate,在非常易读的映射文件中很容易解决复杂问题。实体框架映射文件几乎不可读。


5
2017-10-13 00:14



你知道,这正是我的经历。如果你走出他们预期的做事方式的狭窄边界,你真的会遇到复杂的墙壁。 - Chris


NHibernate支持除SQL Server之外的其他数据库,例如如果您使用的是Oracle。实体框架本身旨在支持多个提供者,但您获得的唯一内置提供者是SQL Server。 Oracle尚未发布任何提供商,并且还有其他数据库的商业或零散免费提供商。因此,如果支持多个DB在范围内,那么此时NHibernate领先于EF 4。


3



感谢那。我将它添加到列表中。然而,对我们来说不是问题,因为我们只使用sql服务器。 - Chris


虽然我对EF没有多少经验,但NHibernate最大的卖点之一就是它的可扩展性。 用户类型 和 事件听众 是NHibernate体验的各个方面的可定制化的很好的例子。


2



干杯,这很有用 - Chris


我在桌面应用程序中使用Entity框架,虽然我对它非常满意,但使用时存在缺陷 DateTime 对象 - 您无法访问属性,最重要的是, DateTime.Date 属性。

此外,您不能使用Entity Framework外部对象(即:不在Entity Framework上下文中的对象,如maping Journal 至 JournalDto)在您的LINQ查询中,即。映射时 - 您必须使用执行查询 ToList() 首先,然后进行映射。

关于EF工具有问题 - 我没有注意到任何与此相关的内容,但我可能只是触及了框架的表面。


1



声明2不正确,您可以使用导航属性直接在查询中检索“外键”对象,或者您可以明确地进行连接。另外,您可以使用预先加载(.Include)来明确加载对象(如果您已禁用延迟加载)。 - RPM1984
关于日期时间,这很奇怪!当您尝试访问属性时会发生什么?鉴于它是一种原始类型,我无法看到日期时间如何只能“减半”。 - Chris
RPM:你用错误的语调读了句子。我希望我的编辑澄清它。我不是指外键关系。 - Femaref
@Fermaref - 是的,你的澄清有帮助。我的错。 - RPM1984