尽管 Entity Framework 4.3 都已经发布了,且表示在 EF 5 中性能将会有很大提升.但很多存储过程控,始终不会放弃使用存储过程,那今天就让我们看看在 EF 4.3 中怎么使用存储过程.

我们接着上篇文章,在 Sql Server 2008 中创建一个简单的存储过程,如下:

CREATE PROCEDURE [dbo].[P_GetArticleByID]          @IDint AS BEGIN         SELECT ID,Title FROM Articles         WHERE ID=@ID;END

查询存储过程在 Controller 中的写法:

BlogContext db =newBlogContext();
SqlParameter[] parms =newSqlParameter[1];
parms[0]=newSqlParameter("@ID",1);
var result = db.Articles.SqlQuery("exec P_GetArticleByID @ID", parms);
returnView(result);

可见,我们通过执行 Sql 语句的方法来使用存储过程.增、删、改方法:

int result = db.Database.ExecuteSqlCommand("exec P_DeleteArticleByID @ID", parms);

本篇简单给出在 EF 4.3 中使用存储过程的方法,希望对大家有所帮助.

 

说明:针对 entityframework 4.0 中添加存储过程和的调用方法

一.新建存储过程

USE [Tester] GO /****** Object:  StoredProcedure [dbo].[GetUserInfoByUserName]    Script Date: 05/11/2011 18:17:13

******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

--create PROCEDURE [dbo].[UserMg_GetUserInfo] -- 新建

--alter PROCEDURE [dbo].[UserMg_GetUserInfo]  -- 修改

@userId char(50)     as     set nocount on

begin

declare   @sqlstr   varchar(2000);

set @sqlstr='         select *   from Customer a   where a.u_id='+@userId+'   union all   select *   from Customer b   where b.u_id='+@userId+'        '

exec(@sqlstr)     end

二.VS 中导入存储过程

1.双击项目中的 .edmx 文件,打开模型编辑窗口

2.在空白处右击,选择“模型浏览器”

3.展开“模型名.Store” 节点,并右击选择“从数据库更新模型”

4.在打开的更新向导中选择“添加”选项卡,展开“存储过程”节点,勾选要添加的过程名称,点击完成

5.右击新添加的存储过程名称,选择“添加函数导入”

6.在弹出的“添加函数导入”窗口中,输入“函数导入名称”并选择该函数对应的“存储过程名称”

7.如果存储过程有返回值的话需要在 “返回以下内容的集合”指定数据类型,并创建接受数据的实体对象

7.1 如果返回值为一个数值,则选择标量,并选择标量类型

7.2 如果返回的是多列的数据集,则选择“复杂类型”      (注:在“存储过程列信息”中点击“获取列信息”按钮,

可以获取到存储过程的返回的结果集中各个列的类型,

特别声明:该获取的类信息取决于存储过程最后一个 select 语句       )

7.3 点击“创建信息的复杂类型”按钮后,可以在“模型浏览器”的“复杂类型”节点下看到刚刚新建

的复杂类型了(负载类型的命名规则为:导入函数名称_Result)

8.点击“确定”按钮后,可以在“模型浏览器”的“函数导入”节点下看到刚刚新导入的函数了

9.到此已经成功的在该数据模型中添加一个存储过程的调用方法了

三.调用示例(只是语法调用的演示)

/// <summary>

/// 调用 UserMg_GetUserInfo 存储过程获取信息

/// </summary>

/// <param name="userId">用户ID</param>

/// <returns></returns>

public static List<Customer> UserMg_GetUserInfo(string userId)

{

using (T.DataAccess.TesterEntities ent = new DataAccess.TesterEntities())

{        ObjectParameter par = new ObjectParameter("userId", typeof(string));

ObjectResult<Customer> result = ent.UserMg_GetUserInfo(userId);

if (result == null)           return null;

return result.ToList();

}

}

Entity Framework 4.3 中使用存储过程的更多相关文章

  1. 在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式

    [原文地址]Using Repository and Unit of Work patterns with Entity Framework 4.0 [原文发表日期] 16 June 09 04:08 ...

  2. Entity Framework在WCF中序列化的问题

    问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...

  3. Entity Framework在WCF中序列化的问题(转)

    问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...

  4. Entity Framework 在MySQL中执行SQL语句,关于参数问题

    在Entity Framework中添加MySQL模型,在写代码的过程中需要直接执行SQL语句. 在SQL语句中用到了@curRank := 0 这样在SQL语句中定义参数,同时还会有传入参数:ai. ...

  5. Entity Framework 学习中级篇2—存储过程(上)

    目前,EF对存储过程的支持并不完善.存在以下问题: l         EF不支持存储过程返回多表联合查询的结果集. l         EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...

  6. Entity Framework 学习中级篇3—存储过程(中)

    目前,EF对存储过程的支持并不完善.存在以下问题: l         EF不支持存储过程返回多表联合查询的结果集. l         EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法 ...

  7. Entity Framework Code First 中使用 Fluent API 笔记。

    在做MVC+EF CodeFirst 的Demo时,碰到的问题, 在组册用户时,要让用户输入确认密码,但是数据库中又不需要保存这个字段,解决方案很多了,这里我列出通过EF Code First的解决方 ...

  8. Entity Framework 学习中级篇4—存储过程(下)

    在EF中,各个实体的插入.更新和删除也都通过使用存储过程来完成,以便提高点性能.这个类似于数据集.其步骤是:先定义存储过程,然后在VS的可视化设计器,设置存储过程映射即可. 下面,以为Supplier ...

  9. EF Entity Framework Core DBContext中文文档

    Add(Object) 以添加状态开始跟踪给定的实体和任何其他尚未被跟踪的可访问实体,以便在调用SaveChanges()时将它们插入数据库.使用State设置单个实体的状态. Add<TEnt ...

随机推荐

  1. Rsync远程同步工具使用

    rsync远程同步工具使用 Rsync(remote synchronize) 是一个远程数据同步工具,可以使用"Rsync算法"同步本地和远程主机之间的文件.Rsync的好处是只 ...

  2. Linux基本文件类型

    Linux基本文件类型 基本文件类型 - : 普通文件 d : 文件目录 p : 管道文件 l : 软连接文件 c : 字符设备文件 s : socket文件

  3. 关于vuex自己理解的三幅图

  4. 洛谷 1894 [USACO4.2]完美的牛栏The Perfect Stall

    [题解] 其实是个二分图最大匹配的模板题,直接上匈牙利算法就好了. #include<cstdio> #include<algorithm> #define N 1010 #d ...

  5. 添物零基础到大型全栈架构师 不花钱学计算机及编程(预备篇)— C语言编程基础

    ​C语言介绍 C语言基本是每个编程人员必学的一面语言,很好掌握,是理解编程的关键.很多编程语言基于其编写或者基于此语言的衍生品编写. C语言是人机交互的一个基础语言之一,虽然是之一,单一般其实就是唯一 ...

  6. print pdf bug & DOCTYPE

    print pdf bug & DOCTYPE OK with <!DOCTYPE html> <!DOCTYPE html> <html lang=" ...

  7. 质因数分解 2012年NOIP全国联赛普及组

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 . 输入描述 Inp ...

  8. python实现汉诺塔算法

    汉诺塔 算法分析 1.步骤1:如果是一个盘子,直接将a柱子上的盘子从a移动到c 否则 2.步骤2:先将A柱子上的n-1个盘子借助C移动到B(图1) 已知函数形参为hanoi(n,a,b,c),这里调用 ...

  9. 5、Java并发性和多线程-相同线程

    以下内容转自http://tutorials.jenkov.com/java-concurrency/same-threading.html(使用谷歌翻译): 相同线程(同一线程)是一种并发模型,其中 ...

  10. maven更改镜像路径为阿里镜像,以便下载速度快

    1.maven更改镜像路径为阿里镜像,以便下载速度快 2.maven每更新一次镜像地址,都会重新下载一次包 3. 怎么配maven链接阿里云的镜像详细步骤 修改maven根目录下的conf文件夹中的s ...