Entity Framework数据库中的存储过程第一种方法

Dee*_*ani 5 c# stored-procedures entity-framework

我正在使用Entity Framework数据库第一种方法从Webforms到MVC应用程序进行项目转换,并准备好数据库以及所有存储过程.

我成功创建了一个.edmx文件,并且能够使用我的存储过程,并且在执行任何插入或更新操作时它工作得很好.但是当我在我的一个存储过程中使用select查询时出现了真正的问题.

例如,有一个Employee表格包含以下列:

EmpId, FirstName, LastName, Age, Salary
Run Code Online (Sandbox Code Playgroud)

我有一个存储过程GetAllEmpDetails有以下选择查询.

Select 
    EmpId, (FirstName + ' ' + LastName) as FullName, Salary 
from 
    Employee
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试将此存储过程的结果与Employee具有5个属性的类绑定到表结构时,我得到一个错误,即该Age属性的值是预期的,但它在结果集中不可用.

我知道也没有FullName属性,所以我的问题是如何用生成的模型类解决这个问题(如本例所示Employee),以便它可以解决这些动态?

Cod*_*shi 14

如何在EF中映射存储过程?

由于您正在使用Database First Approach并且您有EDMX文件,因此让EF为您生成存储过程结果的类.您可能有许多存储过程,并且您希望避免手动创建类:毕竟这是使用ORM工具的全部要点.您的某些存储过程也可能包含参数.按照以下方式进行,将为您处理所有这些.它实际上非常简单.

要让EF为您执行此操作,请按照以下步骤操作:

  1. 双击您的EDMX文件
  2. 从数据库中选择更新模型

您将看到类似于下面的对话框:

在此输入图像描述

  1. 确保您已选中如图所示的框.

这将添加存储过程,您将在模型浏览器中看到它,如下所示:

在此输入图像描述

  1. 如果要更改EF自动生成的类名,请执行此操作.我强烈建议您这样做,并为您的类提供符合.NET命名约定的有意义的名称.我遵循的约定是从存储过程名称中删除任何动词,并将结果一词附加到结尾.所以你最终得到的名字如下所示:

在此输入图像描述

  1. 按确定

一些笔记

这比手动编写类要好得多,以防您的存储过程名称或所需的参数或返回的结果发生变化.此方法也适用于用户定义的函数.

一个陷阱

有时存储过程不会出现在向导对话框中的选择中,因为这样.只需将其添加到存储过程的开头:

SET FMTONLY OFF -- REMEMBER to remove it once the wizard is done.
Run Code Online (Sandbox Code Playgroud)