如何通过EF调用MVC中的存储过程

Chr*_*ris 11 entity-framework enterprise-library asp.net-mvc-3

在哪里可以获得有关MVC框架中存储过程的实体框架的优秀教程?

在这种情况下,当我几乎所有内容都写在存储过程中时,使用Enterprise库是否更好.

注意:我使用的是存储过程,因为它们非常复杂,其中一些超过1000行.

Lad*_*nka 41

在这种情况下,MVC绝对不相关.从EF调用存储过程的方式仍然是相同的.我想你想使用存储过程而不实际使用实体和linq-to-entities(主要EF功能),不是吗?一般来说你需要:

  • EDMX文件(ado.net实体数据模型),您从数据库运行更新并添加要使用的所有存储过程.EDMX文件ObjectContext默认也生成派生和所有实体.
  • 接下来,您必须转到模型浏览器并为每个过程创建函数导入.函数import将在derived上创建方法,ObjectContext这将允许您像任何其他.net方法一样调用存储过程.
  • 在函数导入期间,您必须为从存储过程返回的结果集创建复杂类型(它可以自动发生).

您也不必使用函数导入,您可以通过调用以下任一方法直接执行过程:

  • objectContext.ExecuteSqlCommand("storedProcedureName", SqlParameters) SP没有返回记录集
  • objectContext.ExecuteStoreQuery<ResultType>("storedProcedureName", SqlParameters)对于返回记录集的SP.ResultType必须具有与结果集中的列具有相同名称的属性.它只能用于平面类型(没有嵌套对象).

使用存储过程时存在一些限制:

  • 实体框架不喜欢返回动态结果集的存储过程(基于某些条件结果集有不同的列)
  • 实体框架不支持返回多个结果集的存储过程 - 有EFExtensions,但它更像是直接执行ADO.NET.