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 ...
随机推荐
- 怎么样putty打开图形化管理工具,在终端上
有时需要在putty这种图形终端开放的图形化管理工具将出现以下错误: [root@node2 ~]# Traceback (most recent call last): File "/us ...
- WPF 图片浏览 伪3D效果
原文:WPF 图片浏览 伪3D效果 首先上效果图: 因项目要求,需要把图片以"好看"."炫"的效果展示出来,特地研究了一下WPF关于3D方面的制作,奈何最终成果 ...
- Java Web整合开发(79) -- Struts 2
一. Struts 2.x 概述 不继承任何类的Action Struts 2的Action并不一定要实现Action接口或者继承ActionSupport,任何POJO都可以做Action,只要这个 ...
- JSP+Ajax站点开发小知识
一.JSP基础 1.<select name="love" size="3">当中的size属性指定了列表框显示选项的条数.假设全部选项多于这个 ...
- Web API Test Client 1.2.0
使用方法 1 安装 matthewcv.WebApiTestClient 到你的Web API 项目 PM> Install-Package matthewcv.WebApiTestClient ...
- Windows Phone 的控件倾斜效果
原文:Windows Phone 的控件倾斜效果 Windows Phone 7的系统设置里,按钮都有一个点击倾斜的效果,但自己添加的控件就没有.但微软提供了这个效果的代码:TiltEffect MS ...
- Python计算&绘图——曲线拟合问题(转)
题目来自老师的课后作业,如下所示.很多地方应该可以直接调用函数,但是初学Python,对里面的函数还不是很了解,顺便带着学习的态度,尽量自己动手code. 测试版代码,里面带有很多注释和测试代码: # ...
- [ACM] POJ 3686 The Windy's (二分图最小权匹配,KM算法,特殊建图)
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4158 Accepted: 1777 Descr ...
- Linux课程_系统配置和日常维护
1.设置命令输入提示格公式:"username:当前文件夹$" 2.设置命令输入提示行格式为:"当前系统时间-用户#"(提示:Shell将通过反引號" ...
- c# 16进制显示转化
非原创. 接收16进制数据,在TextBox委托显示: private void readPortandShow() { char[] HexChar = { '0', '1', '2', '3', ...