Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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
Asp.net 实体框架与存储过程_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net 实体框架与存储过程

Asp.net 实体框架与存储过程,asp.net,asp.net-mvc,entity-framework,Asp.net,Asp.net Mvc,Entity Framework,我只是从实体框架开始,我很欣赏代码直接映射到数据库中的表。我现在还没有看到在存储过程中必须使用EF的实用性,我希望任何人对此发表意见。我不是在偷懒,我现在正在自己寻找这个。我想我可以发布这个问题,也可以听取其他人的意见 我的例子是EF是一个ORM,它最适合在数据库中的表中进行映射。但在实时web服务器中,许多请求可能同时发生,这可能会使数据库在执行文本查询之前不得不编译它们,而不仅仅是执行已经预编译的存储过程。EF也可以映射到SPs,但我觉得这在某种程度上削弱了ORM的价值 在这种情况下,我真的

我只是从实体框架开始,我很欣赏代码直接映射到数据库中的表。我现在还没有看到在存储过程中必须使用EF的实用性,我希望任何人对此发表意见。我不是在偷懒,我现在正在自己寻找这个。我想我可以发布这个问题,也可以听取其他人的意见

我的例子是EF是一个ORM,它最适合在数据库中的表中进行映射。但在实时web服务器中,许多请求可能同时发生,这可能会使数据库在执行文本查询之前不得不编译它们,而不仅仅是执行已经预编译的存储过程。EF也可以映射到SPs,但我觉得这在某种程度上削弱了ORM的价值


在这种情况下,我真的很想让你大开眼界。

你可能会发现杰夫对这个问题的评论很有帮助:


他的观点基本上是,存储过程可以被看作是一种过早的优化,在进行这种优化之前,您确实应该确保这是应用程序中的性能瓶颈。例如,有一些框架可用于模拟1000个同步web请求,以查看数据库在一种情况下与另一种情况下在负载下的实际性能。

仅仅因为EF没有使用存储过程,并不意味着它运行的参数化查询不会被编译和缓存。多年来,SQL Server在这方面变得更加聪明。

一种可能的方法: -用于单个对象的动态sql -参数化列表和订单的SPs


ORM的价值通常在于其创建对象模型的简单性。这里描述了一种方法:

它不像杰夫(旧)的帖子所说的那样黑白分明;是的,趋势是使用特殊sql,但这也可能有副作用……这是真的;SQL Server将缓存临时查询计划;但是当它出错时,它会以牺牲数据页为代价……:(是的,我知道这是一篇老文章。但是在搜索这个主题时,我使用了这篇文章,它总是有助于获得更多信息。所以我只是想把这篇文章作为一篇关于这个主题的有趣读物扔掉:它说明所有的特别查询(哪些是EF查询)从SQL 2000开始缓存。这显示了2008如何优化和查询缓存的查询表。作为程序员,您不希望不必维护100个存储过程。向域对象添加一列,bam将更新所有查询。使用存储过程,您必须手动编辑每一个。ORM的解决方案95%的查询,其他5%可以存储在procs中。Phil,我同意,从程序员的角度来看,你是对的。在我们的办公室里,我们有一个数据库团队,负责从头开始的所有数据库定义。这将包括所有表、索引、SP等。他们还执行一些策略,其中某些用户只能访问某些SPs、 切换到EF就像我在做他们已经在做的事情一样(哎哟,我们有一个DBA,除了查询之外,他用DB维护一切,我们在这里使用NHibernate,但我们混合了大约2000个存储过程+NH查询。我们正在慢慢地将所有存储过程移动到NH,只是因为很难控制它们。链接过期,以便访问。)