ADO.NET Entity Framework 和 NHibernate - 何时使用其中之一

Posted

技术标签:

【中文标题】ADO.NET Entity Framework 和 NHibernate - 何时使用其中之一【英文标题】:ADO.NET Entity Framework and NHibernate - when to use one over the other 【发布时间】:2009-04-08 21:42:26 【问题描述】:

我在 Microsoft .NET 商店工作,可以使用 NHibernate 或 ADO.NET EF。关于何时应该选择其中一个,我们应该使用什么指导?

例如,在编写 Silverlight 应用程序时,似乎 EF -to-> ADO.NET Data Services -to-> Silverlight 可以提高工作效率,并为您提供 REST 服务 API,无需额外工作。

还有哪些其他事项可以帮助您逐个应用地指导您?

更新(基于评论): 这个有点有用What differentiates Nhibernate from other ORM’s? 其他人进入奇怪的切线(如 SubSonic),不要直接比较两者。我想我是专门寻找同时使用这两种方法的人,并逐个项目决定他们将使用哪一种。

【问题讨论】:

这是多次重复。只需查看本页右侧的相关问题即可。 【参考方案1】:

简而言之,EF 没有开箱即用的 Persistence Ignorance 支持。去年我第一次尝试使用 EF 构建解决方案时,我有点恼火的是你的应用程序中不能有 POCO。我希望与我的模型有更高程度的解耦,所以我最终切换到 NHibernate。从那以后,有人写了一个 EF POCO 适配器。 http://code.msdn.microsoft.com/EFPocoAdapter - 但是它实际上只是一个代码生成器,它生成一个适配器层来映射您的对象。

由于某种原因,我的应用程序在 NHibernate 下也运行得更快了。对此持保留态度,因为我对配置这两种解决方案都不熟悉。

【讨论】:

PERsistence ignorance 似乎计划在 2010 年初的某个时间随 .NET 4.0 / VS 2010 一起提供的 EF v2.0 发布 感谢您的信息。很高兴听到持久性无知即将出现在 v2 中。将看看适配器,以前没有见过。但在接下来的 18 个月里,我认为我将主要坚持使用 NH。我已经学会了如何编写那些该死的配置文件;) ...现在你将不得不再次忘记映射,因为每个“酷”的人现在都能流利地完成它:) fluentnhibernate.org【参考方案2】:

Microsoft 最近开始开发一种新的解决方案,称为 .NET Ria Services(目前),它将“独立于 ORM”,用于将数据从位于服务器上的业务逻辑层传入和传出 Silverlight。

他们已经公开提到(甚至在 MIX 的幻灯片上)NH在这里得到支持。

如果您正在寻找获得最多社区支持的解决方案,NHibernate 绝对是您的最佳选择。我承认它有一个陡峭的学习曲线,但根据我的经验,它肯定是值得的。只需对“实体框架”和“休眠”进行比较搜索,您就会明白我的意思。大多数 EF 的东西将是“新闻”,而 NHibernate 的东西实际上将是深入人心的技术、血腥细节。和问题。正在回答。

但正如其他海报所提到的 - 我确信实体框架会随着时间的推移而改进。但就目前而言,我相信他们正试图用一个工具集解决太多问题。 NHibernate 只做一件事,但做得非常好。

这里还有应用程序设计的问题。 EF 似乎(在其当前的化身中)旨在将数据库传递给 C# 应用程序。 NHibernate 则相反,它可以更轻松地持久化对象模型。

【讨论】:

+1 好主意。你不必在 NHibernate 上卖给我。我已经研究了大约3个月了。我发现它比 EF 更加可定制和模块化。 NH 的做法对我说。带有 EF 的 LINQ 仍然感觉有点陌生。【参考方案3】:

我现在可能会完全避免使用实体框架。还有vote of no confidence这个成名了,更何况还没有NHibernate那么成熟。

话虽如此,我会继续评估实体框架,因为我确信它会随着时间的推移而得到改进。

【讨论】:

+1 看到了“无配置投票”,以及有关缺少或缺少功能的博客文章。但是你对它的改进是正确的。微软通常会在第三次尝试时得到正确的结果。

以上是关于ADO.NET Entity Framework 和 NHibernate - 何时使用其中之一的主要内容,如果未能解决你的问题,请参考以下文章

ADO.NET Entity Framework 和 NHibernate - 何时使用其中之一

ADO.NET Entity Framework 的实际好处是啥?

ADO.NET Entity Framework 如何查看T

ADO.NET Entity Framework 和标识列

ado.net entity framework无法更新数据库

带有 ADO.NET Entity Framework 的内部类