2011-06-04 103 views
3

我们正在开始使用Razor的MVC 3项目,并且我很困惑在访问/更新数据时采用哪种方法。我知道我们有以下选择。使用存储过程和实体框架的MVC 3 4

* Plain old ADO.NET 
* LINQ to SQL 
* NHibernate 
* Entity Framework 

但我倾向于使用普通老式ADO.Net更倾向于(因为我认为这是最快的) 我仍然会使用模型类,但一旦我从类中的数据,我想继续使用Plain Ado.Net调用存储过程,而不是使用EF Update方法。

如果与使用EF相比,此方法存在任何缺点,我希望得到您的意见。

(这将是一个公开的网站大量的流量!)如果你从依靠特定的数据库上要抽象的代码走

+1

选择一个ORM:http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql/ – 2011-06-05 10:26:06

回答

4

本周在一次采访中,我被一个候选人问到了这个问题。我们只使用存储过程和ADO.NET方法。我们之所以选择这个,是因为我们发现要使用ORM创造出色的应用程序,您需要成为使用ORM的专家。由于我在ORM中没有任何专家,因此我不打算创建/雇佣任何人,所以坚持使用我们知道的堆栈是有意义的。

我说你需要成为一名专家,因为诸如Hibernate(或NHibernate)的ORM创建关系并因此创建SQL(主要是连接等)。我认为ORM非常适合小工具或RAD环境,这些工具必须快速完成,并且可能无法永久生存。我认为对于维护和性能更为关键的大型企业应用程序而言,ADO更安全。这并不意味着这不是不可能的,但必须更加小心以确保它。

我知道这是一个非常热门的话题,ORM比ADO简单得多,但老实说ADO并不难。我渴望听到社区的其他人对此有何评论!

+0

感谢您的投票user636525。我希望我的意见能帮助你下定决心。当负责任地使用ADO和ORM时,它们都是很好的工具,所以在你的项目中运气好。 – hivie7510 2011-06-05 03:23:33

+0

很好,谢谢你。 – 2011-08-08 09:51:29

+0

我相信EF能够很好地工作,您还需要拥有在DB中创建的所有关系 - 基本上拥有非常规范化的数据库,并且为了提高性能,您还需要对表格进行非标准化处理所有这些都可以通过单个数据库调用中的存储过程进行高效管理。例如。为了创建订单,您需要在OrderHeader,OrderLine中创建一个记录,并根据您的逻辑可能是其他几个表,并且在这种情况下,SP会更有效。对于复杂的逻辑应用程序,通过Ado.net的SP似乎更好。 – Vikram 2014-06-04 04:55:14

1

NHibernate的是伟大的,但它似乎你这个折扣 - 没有这个要求。

在你的情况下,我建议沿着EF路线走下去,如果你发现你遇到了任何性能瓶颈,那么看看'plain ado.net'。

澄清,针对这个问题;

“那么你认为与EF路线会比大数据量的处理时,只调用与普通老式Ado.net的存储过程有效得多”

EF创建高效的代码,但你可能会遇到的情况下如果发现性能问题,您需要调整代码和/或数据库。使用EF或其他一些ORM的好处是您可以成为一个更高效的开发人员,这将节省您的时间,并让您专注于业务规则等,而不是使用ado手动构建数据访问权限。网

+0

所以你认为使用EF路径比只调用存储过程效率更高在处理大量数据时使用Plain Old Ado.net?出于某种原因,我总是认为简单的老Ado.net比其他任何东西都快! – user636525 2011-06-04 23:09:25

+0

更快但是什么价格?你将需要做的一切,这是太多的代码!打开连接,获取数据,更新日期,检查数据完整性,处理并发性,关闭... EF和Linq的一切都很简单。 – balexandre 2011-06-04 23:16:48

0

我做了一个公共网站与各地每天浪费带宽60GB(网站只从十二月1日至12月24日运行)和我选择了实体框架LINQ

我没有抱怨EF ...只有服务器无法处理这么多的用户,我不得不将所有图像放入Amazon S3(使用Amazon .NET SDK)每天去除极高的带宽。

EF缓存来电所以当检索同一对象EF足够精明,不会再次调用数据库,并返回缓存的对象,一切都做得非常好,我不得不说,我不想透露对EF当我开始这个项目,但最后,这是一个WIN