C# 实体SQL或StoredProcess,使用什么?

C# 实体SQL或StoredProcess,使用什么?,c#,.net,asp.net,entity-framework,C#,.net,Asp.net,Entity Framework,我可以选择在DAL中使用实体SQL查询,也可以选择在db级别使用存储过程 我应该用哪一个。这两种方法的优点/缺点是什么 我更倾向于实体SQL,因为我不想让我的逻辑暴露在任何形式的db级别。两者都有各自的优点和缺点 实体SQL始终参数化,因此不会受到SQL注入攻击。 但是,如果您对SQL足够了解,您将看到存储过程更加谨慎的情况 您知道您可以在实体框架中使用存储过程吗? 更倾向于建议实体框架。当您觉得在特定场景中存储过程更优化时,请使用存储过程。根据我的经验: 实体框架: 逻辑留在应用程序中 更容

我可以选择在DAL中使用实体SQL查询,也可以选择在db级别使用存储过程

我应该用哪一个。这两种方法的优点/缺点是什么


我更倾向于实体SQL,因为我不想让我的逻辑暴露在任何形式的db级别。

两者都有各自的优点和缺点

实体SQL始终参数化,因此不会受到SQL注入攻击。
但是,如果您对SQL足够了解,您将看到存储过程更加谨慎的情况

您知道您可以在实体框架中使用存储过程吗?

更倾向于建议实体框架。当您觉得在特定场景中存储过程更优化时,请使用存储过程。

根据我的经验:

实体框架:

  • 逻辑留在应用程序中
  • 更容易与源代码管理集成(以我的经验)
  • 如果需要,还可以使用存储过程(我在全文搜索例程中使用了它)
  • 数据库不可知->嗯,我以前没有真正尝试过更改数据库,但它应该可以保护您不受底层持久性存储的影响
  • 个人偏好:获取一系列对象/模型而不是一个庞大的数据表更漂亮、更方便。。更不用说我 需要知道列的顺序等
数据库SP

  • 你不必学习任何新的东西——在storedproc中有一些任务是琐碎的,但在使用EF时却会变得非常晦涩难懂。嗯,这取决于你赶上的速度
  • 易于使用,更精细的控制-直到现在,我还不知道如何创建一个在linq to entities中使用WITH和OVER()的查询

就我个人而言,出于上述原因,我也会选择EF(还有一些我现在想不起来的原因)。此外,如果有什么事情我不能用linq查询快速完成,我将只创建一个存储过程或只执行一个SQL语句(是的,您可以使用上下文执行SQL)。

我仅在以下情况下使用StoredProc:

  • 对于获取一些数据,您应该向数据库发出2个以上的请求-为什么要从脚本发送数据,更容易编写一个过程,该过程将在db中完成所有操作,并且只向您发送重新提交的数据(速度太快了)
  • 如果写一个proc和花5分钟比写一个genious实体和花1天更简单
  • 如果某些操作默认在db中运行得更快,或者实体不支持

  • 如果您也是DB管理员,则使用LINQ实体。 如果你把代码放在一起会更容易


    但是,如果您熟悉SQL(或者其他人负责SQL Server性能),那么请使用存储过程。在不重新发布应用程序的情况下优化数据库操作要容易得多。

    是的,你的想法也和我一样。我还希望逻辑留在我的应用程序中,因此在将来,不必担心DBA会让我访问bla bla bla bla bla。