Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用MVC从头开始创建网站,哪个ORM更好,EF还是NHibernate?_C#_Asp.net Mvc_Database - Fatal编程技术网

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

C# 用MVC从头开始创建网站,哪个ORM更好,EF还是NHibernate?,c#,asp.net-mvc,database,C#,Asp.net Mvc,Database,我想创建一个网站,有许多用户,显然有大量的数据库,我没有EF或NHibernate的经验,推荐给我什么 EF与.NET和Visual Studio的集成非常好。在VisualStudio中为您提供一个非常好的设计器,并利用LINQ编写易于阅读的查询 对我来说,这是一个不需要动脑筋的问题。毫无疑问,我会选择EF4。如果您是第一次使用EF,我建议您选择EF,因为它很容易使用,无需更多配置和隐藏属性……无需额外努力,只需添加对象,您的任务就完成了 但是如果您希望获得更好的性能,请选择NHibernat

我想创建一个网站,有许多用户,显然有大量的数据库,我没有EF或NHibernate的经验,推荐给我什么

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


对我来说,这是一个不需要动脑筋的问题。毫无疑问,我会选择EF4。

如果您是第一次使用EF,我建议您选择EF,因为它很容易使用,无需更多配置和隐藏属性……无需额外努力,只需添加对象,您的任务就完成了


但是如果您希望获得更好的性能,请选择NHibernate。

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


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

我选择NHibernate,因为它允许您比EF更好地调整性能,并且更好地跨不同数据库移植

首次使用ASP.NET MVC时,可以考虑使用。它使用NHibernate。网站上清楚地解释了如何快速入门。

两者都没有

过去一年我一直在使用EF,我遇到的问题不值得这么麻烦

我已经告诉我的同行们这一点——如果我能回到过去,我会使用带有精简API的存储过程将其抽象出来

要么这样,要么使用“轻量级”ORM,如短小精悍或大规模

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

我真的不在乎我是否被否决——只想投入我的两分钱。起初我喜欢EF,因为我来自L2SQL背景,所以这是一个简单的过渡。但当我开始在被子底下挖的时候,我发现和他一起工作是多么痛苦

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

紧贴金属-从长远来看,你会获得更好的性能。在“真实”模型中编写代码-SQL,使用索引,让SQL Server(或Oracle)的引擎做它最擅长的事情

由于LINQ框架的一致性和智能性,IMO(这就是我们在这里所能做的,给出意见),当您有一个非基本模型(大多数人都这样做)时,LINQ实体无法生成足够好的SQL

我的EF4宠物脾气:

  • 无法仅加载某些“类型”。例如,如果你有
    帖子
    位置
    作为
    *.*
    ,而你有
    问题
    作为帖子的一种类型,那么就没有办法检索
    位置
    ,只检索
    问题
    。您必须立即加载所有
    帖子
    ,或使用匿名类型投影。总的来说,迫不及待地加载是非常痛苦的

  • 在无状态的POCO场景中更新现有实体上的关系。同样,如果您有一个
    Post
    ,其中有许多
    位置
    ,并且您想要更改现有
    Post
    链接到的
    位置,那么使用MVC控制器操作很难做到这一点。为了使EF在处理POCO时认为关系已修改,您需要实际将其设置为已修改。但是如果您有POCO,则关系通常是
    ICollection
    ,因此您没有这些内置方法。在执行
    Save
    操作时,您将在OSM的内部手动设置实体状态。我最终手动合并了中的实体,基本上是从左到右

  • 没有成批的语句。我相信NHibernate支持这一点。这是EF的一个大问题,特别是如果您想在一次行程中更新多个对象。我通常最终使用一个存储过程,一开始就忽略了EF

  • 无法将查找表映射到枚举。。好吧,这不是一个大问题,但这是一个令人讨厌的问题。查找表自然适合枚举,但EF根本不支持它——尽管社区从第一天起就发出了请求。不知道为什么这个还没放进去

  • 可能重复的