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 ...
随机推荐
- c++宏源证券编程
1,定义宏功能,作,func(x) = x-1? 最简单的, 假设x = 2则 #define func(x) 1 特化出来x,令 #define func_helper_2 1 #defi ...
- oracle 优化or 更换in、exists、union all几个字眼,测试没有问题!
oracle 优化or 更换in.exists.union几个字眼.测试没有问题! 根据实际情况选择相应的语句是.假设指数,or全表扫描,in 和not in 应慎用.否则会导致全表扫描. sele ...
- 国内PaaS概述和EEPlat定位
2014国内云计算产业进入快速发展阶段.热火多年来,所以云计算的云计算产业迅速进入栈桥的应用.IaaS.PaaS.SaaS各大厂商具有较强的市场布局,所以,云计算应用在这三个层次的访问,以实际使用阶段 ...
- 《SAS编程和数据挖掘商业案例》学习笔记# 19
继续<SAS编程与数据挖掘商业案例>学习笔记,本文側重数据处理实践.包含:HASH对象.自己定义format.以及功能强大的正則表達式 一:HASH对象 Hash对象又称散列表,是依据关键 ...
- 利用Eclipse中的Maven构建Web项目(三)
利用Eclipse中的Maven构建Web项目 1.将Maven Project转换成动态Web项目,鼠标右键项目,输入"Project Facets" 2.依据Dynamic W ...
- 添加服务引用和添加Web引用对比
原文:添加服务引用和添加Web引用对比 在WindowsForm程序中添加服务引用和Web引用对比 为了验证书上有关Visual Studio 2010添加服务引用和Web引用的区别,进行实验. 一. ...
- webclient下载文件 带进度条
private void button1_Click(object sender, EventArgs e) { doDownload(textBox1.Text.Trim()); } private ...
- 浅谈web网站架构演变过程(转)
前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可以如何一步步演变. 该系统具备的功能: 用户模块:用户注册和管理 商品模块:商品展示和管理 交易模块:创建交易和管理 阶 ...
- JDK5什么是新的堵塞队列线程(四)
一. 堵塞队列与普通队列: 队列是一种主要的数据类型,其典型特征是先进先出. 堵塞队列和普通队列的差别在于: 当队列为空时.从队列中获取元素的线程会被堵塞.直到其它的线程往空的队列里插入新的元素: 当 ...
- bnu 34982 Beautiful Garden(暴力)
题目链接:bnu 34982 Beautiful Garden 题目大意:给定一个长度为n的序列,问说最少移动多少点,使得序列成等差序列,点的位置能够为小数. 解题思路:算是纯暴力吧.枚举等差的起始和 ...