在sp中添加下面的红色部分,就是执行sp时的返回类型,后面在EF中添加该sp后,EF会在DBContext文件中,自动生成调用该sp的代码,包括返回类型等,如下:

public virtual ObjectResult<SP_CustomerRequestWriteoff_Result> SP_CustomerRequestWriteoff(Nullable<int> qrTransID, Nullable<int> campaignID, string openID, string buyList, string giftList)
        {
            var qrTransIDParameter = qrTransID.HasValue ?
                new ObjectParameter("qrTransID", qrTransID) :
                new ObjectParameter("qrTransID", typeof(int));
   
            var campaignIDParameter = campaignID.HasValue ?
                new ObjectParameter("campaignID", campaignID) :
                new ObjectParameter("campaignID", typeof(int));
   
            var openIDParameter = openID != null ?
                new ObjectParameter("openID", openID) :
                new ObjectParameter("openID", typeof(string));
   
            var buyListParameter = buyList != null ?
                new ObjectParameter("buyList", buyList) :
                new ObjectParameter("buyList", typeof(string));
   
            var giftListParameter = giftList != null ?
                new ObjectParameter("giftList", giftList) :
                new ObjectParameter("giftList", typeof(string));
   
            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<SP_CustomerRequestWriteoff_Result>("SP_CustomerRequestWriteoff", qrTransIDParameter, campaignIDParameter, openIDParameter, buyListParameter, giftListParameter);
        }

然后直接调用即可,如下:

public static Result ExportPeriodDetailReport(DateTime? beginDate, DateTime? endDate, string activityId, string storeCode, string flag)
        {
            using (var db = new SAISC_4S_PotentialEntities())
            {
                //调用存储过程
                if (flag == "1")
                {
                    var query = db.sp_Rpt_Act_Weekly_List(beginDate, endDate, activityId, storeCode).ToList();
                    return new Result(true, "", query);
                }
               
            }
        }

USE [FrisoFidpDB]
GO
/****** Object:  StoredProcedure [dbo].[SP_CustomerRequestWriteoff]    Script Date: 12/26/2016 14:45:34 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_CustomerRequestWriteoff]
    @qrTransID INT ,
    @campaignID INT ,
    @openID NVARCHAR ,
 --购买明细列表,格式:商品编号:数量,多个以英文逗号隔开,如51234:2,34532:1,9876:3
    @buyList NVARCHAR ,
 --赠品明细列表,格式:商品编号:数量,多个以英文逗号隔开,如51234:2,34532:1,9876:3
    @giftList NVARCHAR
AS
    BEGIN
        IF ( @qrTransID = NULL
             OR @qrTransID = 0
           )
            BEGIN
                DECLARE @sp_Result TABLE
                    (
                      errCode INT ,
                      errMsg NVARCHAR(200) ,
                      proCode NVARCHAR(50)
                    )
                SELECT  *
                FROM    @sp_Result
                RETURN
            END
   
        DECLARE @errcode INT ,
            @errmsg NVARCHAR(500) ,
            @giftCount INT ,
            @idx INT ,
            @customerID INT ,
            @qty INT ,
            @stockType INT ,
            @shopCode NVARCHAR(50) ,
            @cityID INT ,
            @proCode NVARCHAR(50) ,
            @stockQty INT ,
            @giftName NVARCHAR(50) ,
            @fmcCode NVARCHAR(50) ,
            @distributorCode NVARCHAR(200) ,
            @writeOffUserCode NVARCHAR(50) ,
            @writeOffTime DATETIME
        DECLARE @table TABLE
            (
              ID INT ,
              ProCode NVARCHAR(200) ,
              ProCount NVARCHAR(50) ,
              Qty INT ,
              Flag INT
            )
   
        SET @errcode = 0;
        SELECT  @shopCode = ShopCode ,
                @cityID = SalesCityId ,
                @fmcCode = GenUserCode ,
                @writeOffTime = WriteOffTime ,
                @writeOffUserCode = WriteOffUserCode
        FROM    dbo.IDreamTransaction
        WHERE   id = @qrTransID
 
        SELECT TOP 1
                @customerID = Id
        FROM    dbo.Customer
        WHERE   OpenId = @openID
  
  --核销条件检查
        IF ( LEN(@buyList) = 0
             OR LEN(@giftList) = 0
           )
            BEGIN
                SET @errcode = 1000;
                SET @errmsg = '购买明细和赠品明细不能为空';
            END
           
        IF ( @writeOffTime != NULL
             AND @writeOffUserCode != NULL
           )
            BEGIN
                SET @errcode = 9000;
                SET @errmsg = '此二维码已被使用过';
            END
 
  --设置当前会话的数据库锁超时时间为20秒
        SET LOCK_TIMEOUT 20000
 
        BEGIN TRY
            BEGIN TRAN trans
  
   --赠品库存检查
            IF ( @errcode = 0 )
                BEGIN
     --购买明细
                    INSERT  INTO @table
                            ( ID ,
                              ProCode ,
                              ProCount ,
                              Flag
                            )
                            SELECT  ID ,
                                    [key] ,
                                    value ,
                                    1
                            FROM    dbo.[Fun_GetKeyValueList](@buyList, ',',
                                                              ':')
   
     --赠品明细
                    INSERT  INTO @table
                            ( ID ,
                              ProCode ,
                              ProCount ,
                              Flag
                            )
                            SELECT  ID ,
                                    [key] ,
                                    value ,
                                    2
                            FROM    dbo.[Fun_GetKeyValueList](@giftList, ',',
                                                              ':')
   
                    UPDATE  @table
                    SET     Qty = CAST(ProCount AS INT)
                    WHERE   ISNUMERIC(ProCount) = 1
   
                    UPDATE  @table
                    SET     Qty = 0
                    WHERE   ISNUMERIC(ProCount) = 0
   
                    SELECT  @giftCount = COUNT(*)
                    FROM    @table
                    WHERE   Flag = 2
                    IF ( @giftCount > 0 )
                        BEGIN
                            SET @idx = 1;
                            WHILE ( @idx <= @giftCount )
                                BEGIN
                                    SELECT  @proCode = ProCode ,
                                            @qty = Qty
                                    FROM    @table
                                    WHERE   ID = @idx
     
                                    IF ( @qty > 0 )
                                        BEGIN
                                            SELECT  @stockType = m.StockType ,
                                                    @giftName = n.NameCN
                                            FROM    dbo.CampaignGift m
                                                    LEFT JOIN dbo.Product n ON m.GiftCode = n.Code
                                            WHERE   m.CampaignId = @campaignID
                                                    AND m.GiftCode = @proCode
      
           --库存类型,1-门店库存 2-城市库存 3-全国库存
                                            IF ( @stockType = 1 )
                                                BEGIN
                                                    SELECT  @stockQty = ISNULL(StockQty,
                                                              0)
                                                    FROM    dbo.IDreamStock
                                                            WITH ( UPDLOCK )
                                                    WHERE   CampaignId = @campaignID
                                                            AND GiftCode = @proCode
                                                            AND ShopCode = @shopCode
                                                            AND SalesCityId = @cityID
                                                END
                                            ELSE
                                                IF ( @stockType = 2 )
                                                    BEGIN
                                                        SELECT
                                                              @stockQty = ISNULL(StockQty,
                                                              0)
                                                        FROM  dbo.IDreamStock
                                                              WITH ( UPDLOCK )
                                                        WHERE CampaignId = @campaignID
                                                              AND GiftCode = @proCode
                                                              AND SalesCityId = @cityID
                                                    END
                                                ELSE
                                                    IF ( @stockType = 3 )
                                                        BEGIN
                                                            SELECT
                                                              @stockQty = ISNULL(StockQty,
                                                              0)
                                                            FROM
                                                              dbo.IDreamStock
                                                              WITH ( UPDLOCK )
                                                            WHERE
                                                              CampaignId = @campaignID
                                                              AND GiftCode = @proCode
                                                        END
      
           --库存不足直接返回调用方
                                            IF ( @qty > @stockQty )
                                                BEGIN
                                                    SET @errcode = 2000;
                                                    SET @errmsg = '赠品'
                                                        + @giftName + '库存不足';
                                                    BREAK;
                                                END
                                        END
     
                                    SET @idx += 1;
                                END
                        END
                END
  
   --核销操作
            IF ( @errcode = 0 )
                BEGIN
     --添加核销流水并更新库存
                    BEGIN TRY
                        SET @giftCount = 0;
                        SELECT  @giftCount = COUNT(*)
                        FROM    @table
                        WHERE   Flag = 2
                        IF ( @giftCount > 0 )
                            BEGIN
                                SET @idx = 1;
                                WHILE ( @idx <= @giftCount )
                                    BEGIN
                                        SELECT  @proCode = ProCode ,
                                                @qty = Qty
                                        FROM    @table
                                        WHERE   Flag = 2
                                                AND ID = @idx
      
                                        SELECT  @stockType = m.StockType ,
                                                @giftName = n.NameCN
                                        FROM    dbo.CampaignGift m
                                                LEFT JOIN dbo.Product n ON m.GiftCode = n.Code
                                        WHERE   m.CampaignId = @campaignID
                                                AND m.GiftCode = @proCode
      
          --更新库存,库存类型,1-门店库存 2-城市库存 3-全国库存
                                        IF ( @stockType = 1 )
                                            BEGIN
                                                UPDATE  IDreamStock
                                                SET     StockQty = StockQty
                                                        - @qty
                                                WHERE   CampaignId = @campaignID
                                                        AND GiftCode = @proCode
                                                        AND ShopCode = @shopCode
                                                        AND SalesCityId = @cityID
      
                                                SELECT TOP 1
                                                        @distributorCode = DistributorCode
                                                FROM    dbo.IDreamStock
                                                WHERE   CampaignId = @campaignID
                                                        AND GiftCode = @proCode
                                                        AND ShopCode = @shopCode
                                                        AND SalesCityId = @cityID
                                            END
                                        ELSE
                                            IF ( @stockType = 2 )
                                                BEGIN
                                                    UPDATE  IDreamStock
                                                    SET     StockQty = StockQty
                                                            - @qty
                                                    WHERE   CampaignId = @campaignID
                                                            AND GiftCode = @proCode
                                                            AND SalesCityId = @cityID
      
                                                    SELECT TOP 1
                                                            @distributorCode = DistributorCode
                                                    FROM    dbo.IDreamStock
                                                    WHERE   CampaignId = @campaignID
                                                            AND GiftCode = @proCode
                                                            AND SalesCityId = @cityID
                                                END
                                            ELSE
                                                IF ( @stockType = 3 )
                                                    BEGIN
                                                        UPDATE
                                                              IDreamStock
                                                        SET   StockQty = StockQty
                                                              - @qty
                                                        WHERE CampaignId = @campaignID
                                                              AND GiftCode = @proCode
      
                                                        SELECT TOP 1
                                                              @distributorCode = DistributorCode
                                                        FROM  dbo.IDreamStock
                                                        WHERE CampaignId = @campaignID
                                                              AND GiftCode = @proCode
                                                    END
      
          --添加核销流水
                                        IF ( @qty > 0 )
                                            BEGIN
                                                INSERT  INTO dbo.IDreamWriteOff
                                                        ( TransactionId ,
                                                          AppId ,
                                                          CampaignId ,
                                                          SalesCityId ,
                                                          GiftCode ,
                                                          GiftQuantity ,
                                                          ShopCode ,
                                                          FMCCode ,
                                                          CustomerId ,
                                                          OpenId ,
                                                          Remark ,
                                                          CreateTime ,
                                                          UpdateTime ,
                                                          DistributorCode ,
                                                          WriteOffTime ,
                                                          WriteOffType
                                )
                                                        SELECT
                                                              @qrTransID ,
                                                              0 ,
                                                              @campaignID ,
                                                              @cityID ,
                                                              @proCode ,
                                                              @qty ,
                                                              @shopCode ,
                                                              @fmcCode ,
                                                              ISNULL(@customerID,
                                                              0) ,
                                                              @openID ,
                                                              'idream核销' ,
                                                              GETDATE() ,
                                                              GETDATE() ,
                                                              @distributorCode ,
                                                              GETDATE() ,
                                                              '线上兑换'
                                            END
      
                                        SET @idx += 1;
                                    END
                            END
                    END TRY
                    BEGIN CATCH
                        SET @errcode = 3000;
                        SET @errmsg = '添加核销流水并更新库存时异常,信息为' + ERROR_MESSAGE()
                    END CATCH
   
     --添加购买记录
                    IF ( @errcode = 0 )
                        BEGIN TRY
                            SET @giftCount = 0;
                            SELECT  @giftCount = COUNT(*)
                            FROM    @table
                            WHERE   Flag = 1
                            IF ( @giftCount > 0 )
                                BEGIN
                                    SET @idx = 1;
                                    WHILE ( @idx <= @giftCount )
                                        BEGIN
                                            SELECT  @proCode = ProCode ,
                                                    @qty = Qty
                                            FROM    @table
                                            WHERE   Flag = 1
                                                    AND ID = @idx
      
                                            SELECT TOP 1
                                                    @distributorCode = DistributorCode
                                            FROM    dbo.IDreamStock
                                            WHERE   CampaignId = @campaignID
                                                    AND GiftCode = @proCode
     
                                            IF ( @qty > 0 )
                                                BEGIN
                                                    INSERT  INTO dbo.IDreamBuyDetail
                                                            ( TransactionId ,
                                                              ProductCode ,
                                                              Qty ,
                                                              Remark ,
                                                              CreateTime
                                 )
                                                            SELECT
                                                              @qrTransID ,
                                                              @proCode ,
                                                              @qty ,
                                                              'idream核销' ,
                                                              GETDATE()
                                                END
      
                                            SET @idx += 1;
                                        END
                                END
                        END TRY
                        BEGIN CATCH
                            SET @errcode = 4000;
                            SET @errmsg = '添加购买记录发生异常,信息为' + ERROR_MESSAGE()
                        END CATCH
   
     --更新二维码事物表
                    IF ( @errcode = 0 )
                        BEGIN TRY
                            UPDATE  dbo.IDreamTransaction
                            SET     WriteOffTime = GETDATE() ,
                                    WriteOffUserCode = @openID ,
                                    UpdateTime = GETDATE() ,
                                    ExpireTime = GETDATE() + 10
                            WHERE   Id = @qrTransID;
                        END TRY
                        BEGIN CATCH
                            SET @errcode = 5000;
                            SET @errmsg = '添加购买记录发生异常,信息为' + ERROR_MESSAGE()
                        END CATCH
                END
  
            IF ( @errcode = 0 )
                BEGIN
                    COMMIT TRAN trans
                END
            ELSE
                BEGIN
                    ROLLBACK TRAN trans
                    SET @errcode = 8000;
                    SET @errmsg = '核销过程中异常,操作回滚';
                END
        END TRY
        BEGIN CATCH
            ROLLBACK TRAN trans
            SET @errcode = 6000;
            SET @errmsg = '核销过程中异常,信息为' + ERROR_MESSAGE();
        END CATCH
 
        SELECT  @errcode AS errCode ,
                @errmsg AS errMsg ,
                @proCode AS proCode;
        RETURN 1;
    END

EF调用sp,EF自动生成返回类型的更多相关文章

  1. Eclipse自动生成返回值对象的快捷键是什么?

    如下代码 List<ShareholderEntity> shareList = fetch.parseShareHolder(data); 如何自动生成 List<Sharehol ...

  2. 在eclipse中new 对象后怎么通过快捷键自动生成返回对象

    如题,每次new 对象的时候不想手动补全返回对象,可以实现快捷键生成返回对象.new  对象后可以按住ctrl+1,如下图: 选择第一行即可.

  3. 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新

    一.基本介绍      回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...

  4. 自动生成返回Json数据的toString()方法

    平时书写实体类方法的时候,想要获取的值直接返回Json字符串,以便使用,可以直接在Eclipse里面生成. 实现步骤: 1.快捷键Alt+S 2.选择Edit 3.添加字段,名称随意(我的为JsonS ...

  5. 解决IDEA中自动生成返回值带final修饰的问题

    修改配置文件: Editor--Code Style--Java--Code Generation--将Make generated local variables final勾选上

  6. [Silverlight][linq to sql]不能找到linq to sql自动生成类型

    最近在做Silverlight项目,结合使用了WCF RIA service,通过linq to sql自动生成model类型,使用起来非常方便.具体可见linq to sql之silverlight ...

  7. myeclipse自动生成相应对象接收返回值的快捷键

    在你要自动生成返回值对象的那一行的末尾(注意一定要将光标点到最后),按Alt+Shift+L:就可以了.

  8. EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明

    在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...

  9. EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。

    实现功能:查询单张表Student中返回指定的列 一:数据库表结构: 二:存储过程: USE [AdventureWorksDW] GO /****** Object: StoredProcedure ...

随机推荐

  1. c++宏源证券编程

    1,定义宏功能,作,func(x) = x-1?      最简单的, 假设x = 2则 #define func(x) 1 特化出来x,令 #define func_helper_2 1 #defi ...

  2. oracle 优化or 更换in、exists、union all几个字眼,测试没有问题!

    oracle 优化or 更换in.exists.union几个字眼.测试没有问题! 根据实际情况选择相应的语句是.假设指数,or全表扫描,in 和not in 应慎用.否则会导致全表扫描.  sele ...

  3. 国内PaaS概述和EEPlat定位

    2014国内云计算产业进入快速发展阶段.热火多年来,所以云计算的云计算产业迅速进入栈桥的应用.IaaS.PaaS.SaaS各大厂商具有较强的市场布局,所以,云计算应用在这三个层次的访问,以实际使用阶段 ...

  4. 《SAS编程和数据挖掘商业案例》学习笔记# 19

    继续<SAS编程与数据挖掘商业案例>学习笔记,本文側重数据处理实践.包含:HASH对象.自己定义format.以及功能强大的正則表達式 一:HASH对象 Hash对象又称散列表,是依据关键 ...

  5. 利用Eclipse中的Maven构建Web项目(三)

    利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...

  6. 添加服务引用和添加Web引用对比

    原文:添加服务引用和添加Web引用对比 在WindowsForm程序中添加服务引用和Web引用对比 为了验证书上有关Visual Studio 2010添加服务引用和Web引用的区别,进行实验. 一. ...

  7. webclient下载文件 带进度条

    private void button1_Click(object sender, EventArgs e) { doDownload(textBox1.Text.Trim()); } private ...

  8. 浅谈web网站架构演变过程(转)

    前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变.   该系统具备的功能:   用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...

  9. JDK5什么是新的堵塞队列线程(四)

    一. 堵塞队列与普通队列: 队列是一种主要的数据类型,其典型特征是先进先出. 堵塞队列和普通队列的差别在于: 当队列为空时.从队列中获取元素的线程会被堵塞.直到其它的线程往空的队列里插入新的元素: 当 ...

  10. bnu 34982 Beautiful Garden(暴力)

    题目链接:bnu 34982 Beautiful Garden 题目大意:给定一个长度为n的序列,问说最少移动多少点,使得序列成等差序列,点的位置能够为小数. 解题思路:算是纯暴力吧.枚举等差的起始和 ...