如何从实体框架将参数传递给存储过程?

Sat*_*ala 5 parameters stored-procedures entity-framework

我想知道如何从实体框架向存储过程发送参数?提前致谢.

mar*_*c_s 6

第一个问题是:对于哪个版本的实体框架?.NET 3.5?.NET 4 ?? .NET 4中的事情发生了很大的变化(并得到了改进!).

其次:你想做什么:

  • 从数据库中检索行

  • 执行没有返回值的存储过程

  • 映射对实体的INSERT/UPDATE/DELETE操作到存储过程?

这是三个截然不同的场景 - 所以我们需要知道你的目标.

另外:只需搜索谷歌(或Bing) - 有很多博客文章和教程,告诉你如何做到这一点 - 一个快速列表:

还有数千......

更新:好的,所以你想从数据库中检索数据.在这种情况下,您的步骤是:

  • 转到设计器中的EF模型(*.edmx文件)
  • 右键单击并选择 Update Model from Database
  • 选择要使用的存储过程并完成向导

在此输入图像描述

这将为您的物理存储模型中的存储过程创建一个条目.下一个:

  • 转到Model Browser(参见上面的上下文菜单?它就在下面Update Model from Database),导航到存储模型并找到您的程序
  • 右键单击该过程

在此输入图像描述

  • 选择Add Function Import将"功能"(存储过程)从物理存储模型导入概念模型(基本上是您的实体上下文类).

在此输入图像描述

在这里,您有四种选择:

  • 你的存储过程可能不会返回任何东西(比如在我的示例中) - 然后它只是你的上下文类中的一个方法,你可以调用它做某事
  • 您的存储过程可能会返回标量集合,例如INT值列表或其他内容 - 在下拉列表中选择适当的值
  • 您的存储过程可能会返回模型中的实体,例如完整Customer实体 - 在这种情况下,选择最后一个选项并选择要映射到的实体(在这种情况下,您的存储过程必须返回该实体的所有列)

要么:

  • 你的存储过程会返回一些内容 - 但不仅仅是标量(不仅仅是INT),也不是实体 - 在这种情况下,你可以选择第三个选项并定义一个新的复杂类型(一个类)来保存从存储过程返回的结果.

无论你做什么 - 基本上EF都会在你可以调用的对象上下文类中创建一个方法.存储过程所需的任何参数都是该方法的参数,因此您可以非常轻松地传入,例如字符串,整数等.