今天我们利用EF执行sql语句的方式来执行存储过程,并得到OutPut的值。

  首先新建存储过程:

    

Create PROCEDURE proc_testEF
  (
    @id int,
    @voteCount int OUTPUT --返回值
  )
  AS
  BEGIN
    SELECT @voteCount = COUNT(*)
    FROM ConfirmItem
    WHERE ConfirmItemID = @id;
    select * from ConfirmItem where ConfirmItemID=@id;
  END
  

  然后写EF调用方法:

  

using (DBEntities context = new DBEntities())
           {
               var idParam = new System.Data.SqlClient.SqlParameter
               {
                   ParameterName = "@id",
                   Value = 1
               };
               var votesParam = new System.Data.SqlClient.SqlParameter
               {
                   ParameterName = "@voteCount",
                   Value = 0,
                   Direction = ParameterDirection.Output
               };
               var results = context.Database.SqlQuery<Models.ConfirmItem>(
                   "proc_testEF @id, @voteCount out",
                    idParam,
                   votesParam);
 
 
               var person = results.Single();
               var votes = (int)votesParam.Value; //得到OutPut类型值
               return votes;
           }

  测试多次,没有什么问题;最后我对方法进行封装:

  

/// <summary> 
/// 执行原始SQL命令 
/// </summary> 
/// <param name="commandText">SQL命令</param> 
/// <param name="parameters">参数</param> 
/// <returns>影响的记录数</returns> 
public Object[] ExecuteSqlNonQuery<T>(string commandText, params Object[] parameters)
{
    using (DBEntities context = new DBEntities())
    {
        var results = context.Database.SqlQuery<T>(commandText, parameters);
        results.Single();
        return parameters;
    }
}

  调用方式:

  

var idParam = new System.Data.SqlClient.SqlParameter
               {
                   ParameterName = "@id",
                   Value = 1
               };
               var votesParam = new System.Data.SqlClient.SqlParameter
               {
                   ParameterName = "@voteCount",
                   Value = 0,
                   Direction = ParameterDirection.Output
               };
               System.Data.SqlClient.SqlParameter[] parm = {
                                                           idParam,
                                                           votesParam
                                                           };
               parm = (System.Data.SqlClient.SqlParameter[])new BLL.Usual.ConfirmItemManager().ExecuteSqlNonQuery<Models.ConfirmItem>("proc_testEF @id, @voteCount out", parm);
               
               string s = parm[1].Value.ToString();

  当然还有其它的方式,只是觉得这种简单方便,比起添加实体模型来说,要方便很多!

EF 存储过程的更多相关文章

  1. EF 存储过程(上)

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

  2. 分页:T-SQL存储过程和EF存储过程的使用

    首先准备好分页的T-SQL语句: create proc usp_activityFenYe @pageIndex int, @pageSize int, @pageCount int output ...

  3. EF 存储过程(下)

    本节,我们将学习如何手动添加/修改存储过程,如何使EF能够支持Output类型的参数 > 添加/修改存储过程 有时候,某个SQL语句比较复杂,但是数据库中又没有定义相应的存储过程.这个时候,我们 ...

  4. ef——存储过程

      数据库中存在存储过程GetCategory: ALTER proc [dbo].[GetCategory] @cid int as begin select * from Categories w ...

  5. 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法

    一. 背景 上一个章节,介绍了EF调用两类SQL语句,主要是借助 ExecuteSqlCommand  和 SqlQuery 两个方法来完成,在本章节主要是复习几类存储过程的写法和对应的EF调用这几类 ...

  6. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  7. EF基本操作增、删、查、改、分页,join……等

    一.批量添加数据 static void Main(string[] args) { add(); add2(); Console.ReadKey(); } static void add() { D ...

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

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

  9. LINQ TO SQL和Entity Framework 的关系 你了解多少?

    1. LINQ  TO SQL  和EF 特点:  LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射.其中包括的有DBFrist   ...

随机推荐

  1. C++之路进阶——codevs2366(朋友圈)

    2366 朋友圈 2012年省队选拔赛河北  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 大师 Master     题目描述 Description 在很久很久以前,曾经 ...

  2. java一般要点

    1.String是引用类型. 2.char, short, byte在进行运算的时候会自动转换成int类型数据., 3.数据A 异或同一个数两次,得到的还是A 4.java的for循环,可以在前面加一 ...

  3. ios json parse

    参考:http://wenxin2009.iteye.com/blog/1671691

  4. 自建目录中jsp页面访问servlet路径出错404

    ---恢复内容开始--- 自建目录中jsp页面访问servlet路径出错404 使用eclipse建立的项目,总是会遇到路径问题,比如jsp页面访问servlet,jsp在默认的路径.jsp在自建目录 ...

  5. 最懂中文的H5前端框架amazeUI

    Amaze UI 是一个轻量级(所有 CSS 和 JS gzip 后 100 kB 左右)的前端框架, 基于开源社区流行前端框架编写 amazeUI的网址:http://amazeui.org/get ...

  6. 使用JWPlayer在网页中嵌入视频

    首发:个人博客,持续更新和纠错 我一直以为在网页中嵌入视频是件复杂的事,一研究才知道原来非常简单. 实际就是在页面中嵌入个控件.社区里已有很多解决方案了.jwplayer是最受欢迎的(之一).控件包括 ...

  7. Java ActiveMQ 讲解(一)理解JMS 和 ActiveMQ基本使用(转)

    转自:http://www.cnblogs.com/luochengqiuse/p/4678020.html?utm_source=tuicool&utm_medium=referral 最近 ...

  8. 搬瓦工的ShadowSock设置方法:

  9. android 中activity调用本地service中的方法。

    1.自定义一个接口,暴露服务中的方法 public interface IService {    /**服务中对外暴露的方法 */    void methodInService();} 2.自定一 ...

  10. jqeury.base

    min.js //前台调用 var $ = function (args) { return new Base(args); } //基础库 function Base(args) { //创建一个数 ...