EF调用sp,EF自动生成返回类型
在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自动生成返回类型的更多相关文章
- Eclipse自动生成返回值对象的快捷键是什么?
如下代码 List<ShareholderEntity> shareList = fetch.parseShareHolder(data); 如何自动生成 List<Sharehol ...
- 在eclipse中new 对象后怎么通过快捷键自动生成返回对象
如题,每次new 对象的时候不想手动补全返回对象,可以实现快捷键生成返回对象.new 对象后可以按住ctrl+1,如下图: 选择第一行即可.
- 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新
一.基本介绍 回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...
- 自动生成返回Json数据的toString()方法
平时书写实体类方法的时候,想要获取的值直接返回Json字符串,以便使用,可以直接在Eclipse里面生成. 实现步骤: 1.快捷键Alt+S 2.选择Edit 3.添加字段,名称随意(我的为JsonS ...
- 解决IDEA中自动生成返回值带final修饰的问题
修改配置文件: Editor--Code Style--Java--Code Generation--将Make generated local variables final勾选上
- [Silverlight][linq to sql]不能找到linq to sql自动生成类型
最近在做Silverlight项目,结合使用了WCF RIA service,通过linq to sql自动生成model类型,使用起来非常方便.具体可见linq to sql之silverlight ...
- myeclipse自动生成相应对象接收返回值的快捷键
在你要自动生成返回值对象的那一行的末尾(注意一定要将光标点到最后),按Alt+Shift+L:就可以了.
- EntityFramework Core 2.x (ef core) 在迁移中自动生成数据库表和列说明
在项目开发中有没有用过拼音首字母做列名或者接手这样的项目? 看见xmspsqb(项目审批申请表)这种表名时是否有一种无法抑制的想肛了取名的老兄的冲动? 更坑爹的是这种数据库没有文档(或者文档老旧不堪早 ...
- EF调用存储过程查询表中的部分字段,报数据读取器与指定的“AdventureWorksDWModel.Student”不兼容。某个类型为“Age”的成员在同名的数据读取器中没有对应的列。
实现功能:查询单张表Student中返回指定的列 一:数据库表结构: 二:存储过程: USE [AdventureWorksDW] GO /****** Object: StoredProcedure ...
随机推荐
- elasticsearch中国字(mmseg)——手动添加字典
elasticsearch中国文字本身并不是一个理想的插件效果.手动添加字典可以补偿在一定程度上. 后发现了几个实验,mmseg分段机制采用正向最长匹配算法.例如,抵抗"小时报"这 ...
- 在mac os下编译android -相关文章
1. Mac OS X下编译Android源码 http://blog.csdn.net/bulreed/article/details/22783467 2.MAC OS 编译 Android源代码 ...
- Android SwipeRefreshLayout 官方下拉刷新控件介绍
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...
- 设计模式——工厂模式(Factory)
要想正确理解设计模式,首先必须明白它是为了解决什么问题而提出来的. 设计模式学习笔记 --Shulin 转载请注明出处:http://blog.csdn.net/zhshulin 1.概念 工厂模式定 ...
- (一个)kafka-jstorm集群实时日志分析 它 ---------kafka实时日志处理
package com.doctor.logbackextend; import java.util.HashMap; import java.util.List; import java.util. ...
- Java服务器下载速度的限制
没有取之不尽,用之不竭的资源.server有限的带宽.运营商可以限制一点点.近期使用云存储openstack swift待办事项文件存储下载.如果第一个限速code: private Long wri ...
- [LeetCode234]Palindrome Linked List
题目: Given a singly linked list, determine if it is a palindrome. 判断一个单链表是不是回文 思路: 1.遍历整个链表,将链表每个节点的值 ...
- HDU 3829 Cat VS Dog
题意: p个人 每一个人有喜欢和讨厌的动物 假设选出的动物中包括这个人喜欢的动物同一时候不包括他讨厌的动物那么这个人会开心 问 最多几个人开心 思路: 二分图最大独立集 利用人与人之间的冲突 ...
- 1!到n!的和
Time Limit: 1 Sec Memory Limit: 64 MB Submit: 23 Solved: 14 [Submit][Status][Web Board] Descriptio ...
- Unity该插件NGUI得知(9)—— Tween并转换成世界坐标系的大小NGUI尺寸
在游戏中,还有一种比较常见的动画,这是进球后产生,分数将被显示在游戏,而快速移动,使其失去位置加入.就打算使用NGUI的Tween来制作这样的分数动画效果. 依据 Unity插件之NGUI学习(2), ...