Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
.net 如果使用Linq和EF(最佳实践),SP是否冗余_.net_Linq_Entity Framework_Stored Procedures - Fatal编程技术网

.net 如果使用Linq和EF(最佳实践),SP是否冗余

.net 如果使用Linq和EF(最佳实践),SP是否冗余,.net,linq,entity-framework,stored-procedures,.net,Linq,Entity Framework,Stored Procedures,我正在考虑将我的开发团队转移到LINQ和实体框架。如果我这样做了,我是否应该考虑删除SP 通常,我们的架构是(有序的) 我是否应该转向类似于: SQL -> Entity Framework Layer -> Business Objects (probably inherited from EF layer) -> GUI 如果我离开SPs,我会看到同样多的好处吗?还有哪些最佳实践?不,它们不是多余的 我们90%的数据访问代码使用实体框架 这10%用于以下情况: 当代码在

我正在考虑将我的开发团队转移到LINQ和实体框架。如果我这样做了,我是否应该考虑删除SP

通常,我们的架构是(有序的)

我是否应该转向类似于:

SQL -> Entity Framework Layer -> Business Objects (probably inherited from EF layer) -> GUI

如果我离开SPs,我会看到同样多的好处吗?还有哪些最佳实践?

不,它们不是多余的

我们90%的数据访问代码使用实体框架

这10%用于以下情况:

  • 当代码在逻辑上很重要时(过于复杂)
  • 当性能至关重要时
  • 在单个事务中需要影响多个记录时
LINQ实体(通常是LINQ)是一个出色且一致的框架,但有时转换的SQL并不像您期望的那样优化—额外的连接、案例等。有时在这些场景中,明智的做法是跳过表达式树转换,直接使用本机SQL

此外,实体框架还促进了存储过程。您可以将它们映射到模型上,甚至可以将过程直接映射到实体上的CRUD操作

因此,一般来说,对于大多数简单的操作(例如CRUD),使用EF,当性能和复杂性是影响因素时,使用存储过程

嗯。

是的,你应该

当您使用类似ORM的实体框架时,维护存储过程将产生巨大的摩擦。EF生成有效、高性能的SQL,并避免类似SQL注入攻击的情况

有时可能会出现需要运行需要复杂联接或多个表的异常查询的情况—在这些情况下,很容易在存储库中公开调用存储过程的特殊方法—但对于通用CRUD数据访问,只要让您的ORM在运行时为您生成SQL,就不用担心了


(我们以前都是通过存储过程来完成的。去年我们改用了NHibernate,从那以后就再也没有编写过存储过程,而且天空也没有塌下来或发生任何事情……)

只需尝试部分移动到EF(CRUD操作等),但您的部分代码会使用SPs离开。 第二种情况可以应用于重量级查询、事务,以及您希望使用自己定义的代码时。
通常EF提供了开发速度,但是一些特定的东西可以使用SPs方便地开发。此外,SPs始终可以提升您的性能

@Mike Mengell-很高兴我能帮上忙。
SQL -> Entity Framework Layer -> Business Objects (probably inherited from EF layer) -> GUI