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 ...
随机推荐
- 关与 Visual.Assist.X.V10.7.1912的Crack破解补丁(vs 番茄插件的key破解方法)
在win7系统下, 我用的是vs2012版本号. Visual Assist沿用了快10年的界面,最终有了更新,变得更加适合Win8 以及 VS2012的主题风格了 ,这也是以后软件的发展趋势,仅仅是 ...
- C++primer读书笔记9-转换和类类型
有时指定自己的类类型来表示某些类型的数据,如SmallInt,然后在为了便于计算将指定一个转换算,类类型,在某些情况下,自己主动转换为指定的类型 <1>转换操作符 operator typ ...
- WF系列——工作流基本知识
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程自动进行,从而实现某个预期的业务目标 ...
- 【C语言的日常实践(十四)】constkeyword详细解释
const是C语言keyword,它定义一个变量不同意变更.使用const在一定程度上,可以提高节目的安全性和可靠性.其他.解const的作用,在看别人的代码时,对理解对方的程序有一定帮助. 1.co ...
- FPGA 时序问题
近期 做一个项目------4个 1080p(1920 x 1080) 合成 一个 4K(3840 x 2160,297M)的接口板.当 1080p 进去, 1080p出来的时候,视频正常 播放出来. ...
- 谈论json - json经常使用的功能
json经常使用的功能有JSON.parse().JSON.stringify(),供json对象和字符串之间的相互转换. 1.JSON.parse() 将 JavaScript 对象符号 (JSON ...
- Solr/SolrCloud -error
状态 2014-08-20 10:46:22,356 INFO [coreZkRegister-1-thread-1] [org.apache.solr.cloud.ShardLeaderElecti ...
- 懵懵懂懂初识J2EE
一.定义 Java2平台包含:标准版.企业版.微缩版.当中J2SE是Java2的标准版,主要用 于桌面应用软件的编程:J2ME是微缩版,主要应用于嵌入式系统开发:还有这次学习的J2EE是Java2的企 ...
- NBA球员 ESPN前20排名:詹姆斯再居榜首
2014年 ESPN球员实力最后排名 没想到 保罗-乔治没有上榜.之前预測的火箭两大明星排名落后了,杜兰特排到第8有点出乎意料. 戴维斯升得那么快有点出乎意料,一个球队拥有两位排前十位的球队:骑士,快 ...
- SQL Server 2008性能故障排查(三)——I/O
原文:SQL Server 2008性能故障排查(三)--I/O 接着上一章:CPU瓶颈 I/O瓶颈(I/O Bottlenecks): SQLServer的性能严重依赖I/O子系统.除非你的数据库完 ...