如何在 ADO.NET 实体框架中使用存储过程

2024-01-12

我有3张桌子;我在 ADO.NET 实体框架中编写了一个存储过程。

ALTER PROCEDURE [dbo].[sp_GetDepartmanData]
(@departman nvarchar(50))
BEGIN
  SELECT  
    d.ID, d.Name as DepartmanName,  
    sb.Salary, sb.email,
    sp.Name, sp.SurName, sp.Phone, sp.Married, sp.Address
  FROM         
    Departman d 
  INNER JOIN StaffsBusiness sb ON d.ID = sb.StaffsPersonelDepartmanID
  INNER JOIN StaffsPersonel sp ON sb.StaffsPersonelID = sp.ID 
  WHERE
    d.Name = @departman
END

我需要一个存储过程函数,我在下面编写:

var staffPersonel = staffContext.GetPersonelInformationWithDepartmanID("Yazılım");

gvPersonel.DataSource = staffPersonel;
gvPersonel.DataBind();

我从 SQL 编写的 GetPersonelInformationWithDepartmanID 函数(ADO.NET 实体框架中的用户定义函数)有 3 个替代方案(这很愚蠢!!!),但我有 3 个连接表!!!。如果我之前加入了3张桌子,我该如何使用?


好的,您需要执行以下几个步骤:

  • 添加您的存储过程sp_GetDepartmanData到您的实体框架模型 (顺便说一句 - 这是strongly推荐NOT调用您的存储过程sp_(something)- 使用sp_前缀是为 Microsoft 专用的系统存储过程保留的)
  • 由于您的存储过程返回一组数据,因此您需要先为其创建一个概念实体,然后才能使用存储过程;在实体设计器中,创建一个新实体并为其命名一些有用的名称,例如DepartmentDataEntityType或者其他的东西;将从存储过程返回的所有字段添加到该实体类型
  • 现在,您可以在实体数据模型中创建函数导入 - 转到模型浏览器,在“model.store”部分中转到您的存储过程,然后右键单击“创建函数导入”
  • 您现在可以在对象上下文中为您的函数命名并定义它返回的内容 - 在这种情况下,选择您新创建的实体类型(例如DepartmentDataEntityType从上面)
  • 你完成了!

您现在应该有一个函数导入,如下所示:

public global::System.Data.Objects.ObjectResult<DepartmentDataEntityType> GetPersonelInformationWithDepartmanID(global::System.String departmentName)
{
    global::System.Data.Objects.ObjectParameter departmentNameParameter;

    departmentNameParameter = new global::System.Data.Objects.ObjectParameter("departmentNameParameter", departmentName);

    return base.ExecuteFunction<DepartmentDataEntityType>("sp_GetDepartmanData", departmentNameParameter);
}

现在可以调用对象上下文上的此函数,以通过存储过程从数据库检索数据。

Marc

Edit:

如果执行此操作后出现映射错误(“错误 3027:没有为以下 EntitySet/AssociationSet 指定映射”),这是因为您创建的实体未映射到任何内容,并且仅在函数导入填充集合时使用这些实体。您要么需要以某种方式将该实体映射到数据存储,要么需要将其更改为复杂类型。

要创建复杂类型,只需打开 EF 设计器并右键单击空白区域即可。转到添加 > 复杂类型。您应该会看到模型浏览器中出现一个新的复杂类型。右键单击它并添加标量属性,类似于向实体添加属性的方式。然后删除您的实体并将复杂类型重命名为与实体相同的名称。

这就是你所要做的:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ADO.NET 实体框架中使用存储过程 的相关文章

随机推荐

  • import _socket:“导入错误:DLL 加载失败”

    我昨天尝试安装 Django 和 pymc 遇到很多问题后 我决定重新安装 Python 2 7 我已经这样做了 但现在导入几乎所有东西都遇到问题 我得到了一堆行 最后一行是 File c python27 lib httplib py l
  • 如何修复照片方向的角度

    我无法让照片在我的角度 节点应用程序中以正确的方式定向 我的应用程序已设置为使用 ng2 file upload 将文件从 Angular 应用程序发送到服务器 其中 multer 和 multer s3 将该照片保存在 AWS S3 中
  • 如何在一次休息 API 调用中从 azure key Vault 获取最新的秘密版本值

    如果我已经知道使用此端点的版本号 我可以从rest api中的azure key Vault获取秘密 https my key vault dev vault azure net secrets MyTestSecret 13f8347b8
  • 如何用FFMPEG正确将H264封装成FLV?

    首先 标题中的 适当 指的是这个相关问题 https stackoverflow com questions 44952940 ffmpeg how to wrap h264 stream into flv container 其中的答案并
  • 如何从 cmd 运行属于包一部分的 .class 文件?

    当我做我的事情时 我不断收到错误 class的一部分package并尝试从cmd运行它 这是使用后有效的代码javac然后是java class HelloWorld public static void main String args
  • NSURLErrorDomain:-1003

    当我在 Xcode 中运行我的应用程序时 我收到 NSURLErrorDomain 1003 我还没有在 StackOverflow 上看到这个错误 有任何线索吗 我正在使用阿拉莫菲尔 4 func fetchAllPosts Alamof
  • 尽管给出不同的答案来调用实际方法以返回静态方法执行

    我正在使用 powermockito 并且我正在嘲笑一个班级SomeUtil拥有所有静态方法 import java util List class SomeUtil other static methods public static X
  • WebSocket 握手:意外的响应代码:kubernetes-ingress 中的 400

    如果我连接到 Web 套接字服务的入口 则会遇到此问题 失败 WebSocket 握手期间出错 意外的响应代码 400 入口 YAML kind Ingress apiVersion extensions v1beta1 metadata
  • npm install 显示错误,未找到 git

    我最近向包 JSON 添加了一些依赖项并尝试安装 npm 但它显示与 git not find 相关的错误 npm 错误 路径gitnpm 错误 代码 ENOENTnpm 错误 错误信息npm 错误 系统调用派生 gitnpm 错误 eno
  • Ruby 中未初始化的常量 MyClass (NameError)

    我有一个模块 Shish 其作用类似于抽象类 和一个访问者类 Only Onions 我想在 Shish 模块中实例化 Only Onions 以便所有扩展 Shish 的类都可以使用该对象来确定它们是否只有 onions module S
  • Laravel 验证错误

    这是错误 Symfony Component Debug Exception FatalErrorException 调用 未定义方法 Illuminate Validation Validator make 这是我的代码 validato
  • 核心数据关系问题

    I m facing a weird issue with my core data I ve the following relationship 一个联系人可以属于一个类别 一个类别可以有多个联系人 我想在创建联系人时访问联系人中的我的
  • ODAC:未将对象引用设置为对象的实例

    我正在尝试连接到 Oracle Express 11g 我正在将 ODAC 12c 与 Visual Studio 2015 结合使用 以下是我尝试连接的方式 OracleConnection con con new OracleConne
  • 如何在文本块中处理意图(Java 13)

    我刚刚尝试了 Java 13 中的新文本块功能 遇到了一个小问题 我读过了这篇文章来自 Jaxcenter https jaxenter com java 13 text blocks 162278 html 结束的三引号会影响格式 Str
  • 我收到错误语法错误,意外的$end,期待keyword_end [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我是第一个使用 ruby 的人 所以当我遵循指南 http guides rubyonrails org getting star
  • 如何让一个类使用 applicationContext beans?

    我正在开发我的第一个 java struts2 webapp 并且希望能够将 bean 参数注入到任何被调用的类中 但我发现我只能用 struts 动作类来做到这一点 假设我的 applicationContext xml 文件中有这个 b
  • C++ 错误表达式不能用作函数

    我如何编辑我的公式 weekday day 2 month 3 month 5 year year 4 year 100 year 400 7 这样我就不会收到 表达式不能用作函数 的错误消息 include
  • 从 C 调用 Intel 8086 汇编程序

    我需要为汇编语言开发一个过程 并从 C 语言调用该过程 传递一个字符串并返回一个整数值 我的组装程序 独立 运行良好 我需要帮助将它们连接在一起 程序应该在 Intel 8086 上运行 我需要使用 MASM 或 emu8086 作为汇编器
  • 以编程方式分离 SQL Server 数据库以复制 mdf 文件

    我有一个小型 SQL Server 数据库 需要根据命令进行复制 我需要能够在任何给定时刻获取 mfd 和 ldf 文件 复制它们 压缩它们 然后将它们提供给最终用户 现在这可以通过手动实现 1 通过远程桌面登录SQL服务器 2 通过 SQ
  • 如何在 ADO.NET 实体框架中使用存储过程

    我有3张桌子 我在 ADO NET 实体框架中编写了一个存储过程 ALTER PROCEDURE dbo sp GetDepartmanData departman nvarchar 50 BEGIN SELECT d ID d Name