在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. 【OpenCV新手教程之十八】OpenCV仿射变换 &amp; SURF特征点描写叙述合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/33320997 作者:毛星云(浅墨)  ...

  2. Asp.NET MVC3 使用 SignalR 实现推(持续)

    一,Persistent Connection 演示示例教程 1.实现server端代码 1),编写server PersistentConnection 代码 项目中 SignalR 文件夹下创建 ...

  3. Directx11学习笔记【二】 将HelloWin封装成类

    我们把上一个教程的代码封装到一个类中来方便以后的使用. 首先新建一个空工程叫做MyHelloWin,添加一个main.cpp文件,然后新建一个类叫做MyWindow,将于窗体有关的操作封装到里面 My ...

  4. atitit.404错误调查过程汇总

    atitit.404错误调查过程汇总 #----------jsp  head  errorPage="" del zeu ok le. #------resin server. ...

  5. 具体的了解“&gt;/dev/null 2&gt;&amp;1”

    Linux系统中不管是crontab里面.还是平时使用的命令.常常会碰到">/dev/null 2>&1".比方说:在Crontab Job里面,假设不想发送邮 ...

  6. 无显示仍然发挥树莓派——VNCserver设定

    谁说没有显示器就不能玩树莓派的图形界面了.不要忘了VNCserver哦! VNC(Virtual Network Computing)属于一种网络显示系统,也就是说它能将完整的窗体界面通过网络传输到还 ...

  7. 4安德鲁斯.2.2在系统,具有系统权限的应用程序无法读取或写入SD卡

    有两个解决方案: 1.通过改动android系统的源代码,开放SD卡的读写权限,具体的改动方法和说明.能够參考网上资料http://www.ifeegoo.com/android-debug-stat ...

  8. struts详细解释拦截器

    1.拦截器:Struts2拦截器将一个Action要么Action的方法.之前或截取后场,和Struts2拦截器是可插拔,拦截器AOP一种实现. WebWork:拦截器是动态拦截Action调用的对象 ...

  9. 关于Windows azure从github上部署项目

    自己做了一个闪存解析的webapi,今天尝试了一下加一个HelpPage,本地访问正常,但是在azure上就报错. 项目是不熟在WindowsAzure上的,项目自动同步github上的项目.gith ...

  10. HDU ACM 1290 献给杭电五十周年校庆的礼物

    解析: 1.n条直线把平面切割成的区域数为: f(n)=f(n-1)+n=n(n+1)/2+1; 2.把空间切割为最多区域数的时候,第n个平面与前(n-1)个平面相交.且无三面共线,因此该平面与前(n ...