使用MVC从头开始创建网站,哪个ORM更好,EF还是NHibernate?

时间:2011-06-06 06:08:50

标签: c# asp.net-mvc database

我想创建一个网站,有很多用户,显然有大量的数据库,我没有EF或NHibernate的经验,我建议使用什么?

5 个答案:

答案 0 :(得分:4)

EF与.NET和Visual Studio完美集成。在Visual Studio中为您提供了一个非常优秀的设计器,并利用LINQ编写易于阅读的查询。

对我来说,这是一个明智的选择。我毫无疑问会选择EF4。

答案 1 :(得分:1)

如果你是第一次做我会建议你去EF,因为它很容易与它配合,没有更多的配置和隐藏的属性....不需要任何额外的努力只需添加对象,你的任务就完成了

但是如果你看起来性能更好,请选择NHibernate。

答案 2 :(得分:1)

答案取决于您在后端使用的数据库。如果您正在使用任何Microsoft数据库,那么EF就是您的选择。

Oracle还没有支持EF的客户端(即将推出),因此您需要使用NHibernate与Oracle通信,直到他们更新客户端为止。

答案 3 :(得分:0)

我会选择NHibernate,因为它可以让你比EF更好地调整性能,并且可以在不同的数据库中更好地移植。

首次使用asp.net mvc时,您可以考虑使用S#arp architecture。它使用NHibernate。在网站上清楚地解释了如何快速入门。

答案 4 :(得分:0)

都不是。

过去一年我使用了EF,我遇到的问题不值得麻烦。

我已经告诉过我的同行了 - 如果我可以回过头来,我会使用带有精简API的存储过程来抽象它。

或者使用像Dapper或Massive这样的“轻量级”ORM。

EF给了我太多膨胀,关联的复杂性(特别是继承模型),bug从未修复,以及在无状态环境(如MVC)中“更新”实体的问题。

如果我被投票,我真的不在乎 - 只想加入我的两分钱。最初我喜欢EF,因为我来自L2SQL背景,所以这是一个简单的过渡。但是,一旦我开始深入挖掘,我发现它的使用是多么痛苦。

话虽如此 - 我还没有使用NHibernate所以我不能对此发表评论,只评论实体框架。

坚持靠近金属 - 从长远来看,你会获得更好的表现。在“真实”模型中编写代码 - SQL,使用索引,让SQL Server(或Oracle)的引擎尽其所能。

由于LINQ框架是一致且智能的,IMO(这就是我们可以在这里做的,给出意见),当你有一个非基本模型时,LINQ-Entities就不能生成足够好的SQL(大多数人都这样做)

我的EF4 Pet Peeves:

  1. 无法只加载某些“类型”。例如,如果您将PostLocation作为*..*,并且Question作为一种帖子,则无法检索Location和只是它是Question的。您必须先加载所有 Posts,或使用匿名类型投影。一般来说,急切加载非常痛苦。

  2. 在无状态的POCO场景中更新现有实体的关系。再次,如果您有Post,其中有Location个,并且您希望更改现有Location链接到的Post,使用MVC控制器操作没有简单的方法。为了让EF在使用POCO时认为关系modified,您需要将其实际设置为已修改。但是如果你有POCO,那么关系通常是ICollection<TPOCO>,所以你没有这些内置的方法。当您执行Save时,最终会在OSM的内部手动设置实体状态。我最终手动合并实体,基本上是从左到右。

  3. 没有批处理语句。我相信NHibernate支持这一点。这是EF的一个大问题,特别是如果你想在一次旅行中更新多个对象。我通常最终使用存储过程,首先击败了EF点。

  4. 无法将查找表映射到枚举。。好的,所以这不是一个大问题,但这是一个令人讨厌的问题。查找表非常适合枚举,但EF根本不支持它 - 尽管社区从第1天开始请求。不知道为什么没有这样做。