在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. 动态创建ImageView

    1.布局文件 <LinearLayout android:id="@+id/viewGroup" android:layout_width="wrap_conten ...

  2. Redis整合Spring结合使用缓存实例(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了如何在Spring中配置redis,并通过Spring中AOP的思想,将缓存的 ...

  3. jquery处理页面元素

    处理父级页面中的元素 $(parent.document).find('#hidSendPerson').val(val);$(parent.document).find('#btnGo').clic ...

  4. [Django] Base class in the model layer

    In the model layer, the Model class is the base class while the ModelBase class is metaclass.

  5. Simple Automated Backups for MongoDB Replica Sets

    There are a bunch of different methods you can use to back up your MongoDB data, but if you want to ...

  6. 对ESB概念的理解(转)

    http://www.ibm.com/developerworks/cn/webservices/0811_magy_esb/ 什么是 ESB?ESB 严格来说不是某一个产品,而是一种框架,设计模式. ...

  7. Java 开源博客 —— Solo 0.6.9 发布时间!

    Solo 它是 GitHub 上 Star 的最大数量 Java 博客系统,今天,我们宣布 0.6.9 正式版,欢迎来到下载. 特性 基于标签的文章分类 博客/标签 Atom/RSS.Sitemap ...

  8. 得到JAVA项目根文件夹

    获得的相对路径 说明:相对路径(这并不说明什么时候相对谁)可以通过以下来获得(无论是一般java项目或web工程) String path = System.getProperty("use ...

  9. Android - 用Fragments实现动态UI - 和其他Fragments通信

    为了重用Fragment UI组件,应该把每个都设计为它自有的模块组件并且有自己的布局和行为.一旦定义了这些可重用的Fragment,你可以把它们和一个activity关联然后和程序的逻辑一起实现上层 ...

  10. JAVA中的super和this关键字的使用

    一 this关键字 this关键字可以出现在构造方法和实例方法中,不能出现在静态方法中,这是因为静态方法可以用类名来调用,这时可能还没有任何对象诞生. this主要有两种用法: 1 用在构造方法中,调 ...