Asp.net mvc 3 使用存储过程与实体框架4的MVC 3

Asp.net mvc 3 使用存储过程与实体框架4的MVC 3,asp.net-mvc-3,Asp.net Mvc 3,我们正在用Razor启动一个MVC 3项目,我不知道在访问/更新数据时应该采取哪种方法。我知道我们有以下选择 * Plain old ADO.NET * LINQ to SQL * NHibernate * Entity Framework 但我更倾向于使用普通的旧ADO.Net(因为我认为这是最快的) 我仍然会使用模型类,但是一旦我从类中获得数据,我想继续使用普通的Ado.Net调用存储过程,而不是使用EF更新方法 如果这种方法与使用EF相比有任何缺点,我想听听你的意见 (这将是一个拥有大量

我们正在用Razor启动一个MVC 3项目,我不知道在访问/更新数据时应该采取哪种方法。我知道我们有以下选择

* Plain old ADO.NET
* LINQ to SQL
* NHibernate
* Entity Framework
但我更倾向于使用普通的旧ADO.Net(因为我认为这是最快的) 我仍然会使用模型类,但是一旦我从类中获得数据,我想继续使用普通的Ado.Net调用存储过程,而不是使用EF更新方法

如果这种方法与使用EF相比有任何缺点,我想听听你的意见


(这将是一个拥有大量流量的公共网站!)

如果您想将代码从依赖特定数据库的状态中抽象出来,那么NHibernate非常棒,但您似乎已经对此打折了——不需要这样做

在您的情况下,我建议您选择EF路线,如果您发现遇到任何性能瓶颈,请查看“普通ado.net”

就这一问题作出澄清


“因此,在处理大量数据时,您认为使用EF路由比仅使用普通的旧Ado.net调用存储过程要高效得多”


EF可以创建高效的代码,但是如果发现性能问题,您可能会遇到需要优化代码和/或数据库的情况。使用EF或其他ORM的好处是,您将成为一名更高效的开发人员,它将节省您的时间,让您能够专注于业务规则等。而不是使用ado.net手工创建数据访问。本周的一次面试中,一位应聘者向我提出了这一问题。我们只使用存储过程和ADO.NET方法。我们选择这样做是因为,我们发现,要使用ORM创建性能优异的应用程序,您需要成为使用ORM的专家。因为我没有任何ORM方面的专家,我也不打算创建/雇佣任何专家,所以坚持使用我们知道的堆栈是有意义的

我说您需要成为一名专家,因为诸如Hibernate(或NHibernate)之类的ORM创建关系以及SQL(主要是连接等)的方式。我认为ORM非常适合小型工具或RAD环境,在这些环境中,事情必须快速完成,而且可能不会永远存在。我认为对于维护和性能更为关键的大型企业应用程序,ADO更安全。这并不意味着这不是不可能的,但必须更加谨慎地确保这一点


我知道这是一个非常热门的话题,ORM比ADO简单得多,但老实说,ADO并没有那么难。我很想听听社区其他人对此有什么看法

我创建了一个公共网站,每天大约有60Gb的带宽浪费(网站仅在12月1日至12月24日运行),我确实选择了实体框架LINQ

我没有抱怨EF。。。只有服务器无法处理这么多用户,我不得不将所有图像放入AmazonS3(使用Amazon.NETSDK),以消除每天大量的bandwith


EF缓存调用因此,当检索同一对象时,EF足够聪明,不会再次调用数据库并返回缓存对象,这一切都做得非常好,我不得不说,在开始项目时,我对EF保持沉默,但最后,这是一场胜利

因此,您认为在处理大量数据时,使用EF路由比使用普通的旧Ado.net调用存储的进程要高效得多?出于某种原因,我总是认为普通的旧Ado.net比其他任何东西都快!更快,但价格是多少?你将需要做的一切,这是太多的代码!打开连接、获取数据、更新日期、检查数据完整性、处理并发性、关闭。。。英孚和林克一切都很好。。。简单多了,谢谢你的投票。我希望我的评论能帮助你下定决心。ADO和ORM在负责任地使用时都是很好的工具,所以祝你的项目好运。我相信EF可以很好地工作,您还需要在DB中创建所有关系—基本上是一个非常规范化的数据库,很多时候为了性能着想,您还需要非规范化的表,所有这些都可以通过存储过程在单个DB调用中非常有效地管理。例如,为了创建订单,您需要在OrderHeader、OrderLine中创建一条记录,并且可能会根据您的逻辑创建两个其他表,在这种情况下,SPs将更有效。对于复杂的逻辑应用程序,通过Ado.net的SP似乎更好。选择ORM: