在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. ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总

    一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...

  2. 使用crontab创建 linux 系统定时任务#

    任务1: 每隔1分钟,运行一次 /home/sn/yeelink.sh文件 ,用于上传数据到www.yeelink.net 1. 先在当时目录里面创建一个cronfile文件 vim cronfile ...

  3. Thinkphp编辑器扩展类kindeditor用法

    一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...

  4. Android 屏幕实现水龙头事件

    在android下,事件的发生是在监听器下进行,android系统能够响应按键事件和触摸屏事件.事件说明例如以下: onClick(View v)一个普通的点击button事件 boolean onK ...

  5. cocos2dx 3.0 学习笔记 引用cocostudio库 的环境配置

    cocostudio创建UI并应用时须要引用cocostudio库,须要额外的环境配置: 之前已经搭配好了基础的开发环境,包含 1) JDK 2) Python 2.7 3) ant 4) visua ...

  6. iOS 7 新特性

      iOS7更新了很多引人注目的功能.用户界面完全重新设计了.iOS7为开发2D,2.5D游戏引入了全新的动画系统.加强多线程,点对点连接,以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发 ...

  7. Linux鸟哥的私房菜(3)— 总体规划和磁盘分区 读书笔记

    1.每个硬件设备Linux中的文件名称 在Linux系统中.每一个设备都被当成一个文件来对待.而且差点儿全部的硬件设备文件都在/dev文件夹下 常见设备与其对于文件名称 2.磁盘连接的方式与设备文件名 ...

  8. POJ 3177 Redundant Paths - from lanshui_Yang

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  9. IOS基金会_ UICollectionView简单易用

    和表格视图类似 UICollectionView的使用有两种方法 一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView. ...

  10. 使用jQuery和css3实现了仿淘宝ued博客左边的菜单切换动画

    今天看到淘宝ued博客的左侧导航菜单的动画好,要使用jQuery和css3我做一个简单的示例,主要用途是实现jQuery 事件和css3 transition属性. 个元素来实现鼠标滑动到某个导航的背 ...