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 ...
随机推荐
- ubuntu 14.04设备OVS虚拟OpenFlow交换机配置汇总
一.设备OVS sudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source ( ...
- 使用crontab创建 linux 系统定时任务#
任务1: 每隔1分钟,运行一次 /home/sn/yeelink.sh文件 ,用于上传数据到www.yeelink.net 1. 先在当时目录里面创建一个cronfile文件 vim cronfile ...
- Thinkphp编辑器扩展类kindeditor用法
一, 使用前的准备. 使用前请确认你已经建立好了一个Thinkphp站点项目. 1,Keditor.class.php和JSON.class.php 是编辑器扩展类文件,将他们拷贝到你的站点项目的Th ...
- Android 屏幕实现水龙头事件
在android下,事件的发生是在监听器下进行,android系统能够响应按键事件和触摸屏事件.事件说明例如以下: onClick(View v)一个普通的点击button事件 boolean onK ...
- cocos2dx 3.0 学习笔记 引用cocostudio库 的环境配置
cocostudio创建UI并应用时须要引用cocostudio库,须要额外的环境配置: 之前已经搭配好了基础的开发环境,包含 1) JDK 2) Python 2.7 3) ant 4) visua ...
- iOS 7 新特性
iOS7更新了很多引人注目的功能.用户界面完全重新设计了.iOS7为开发2D,2.5D游戏引入了全新的动画系统.加强多线程,点对点连接,以及许多其他重要的功能让iOS7成为有史以来最有意义的一次发 ...
- Linux鸟哥的私房菜(3)— 总体规划和磁盘分区 读书笔记
1.每个硬件设备Linux中的文件名称 在Linux系统中.每一个设备都被当成一个文件来对待.而且差点儿全部的硬件设备文件都在/dev文件夹下 常见设备与其对于文件名称 2.磁盘连接的方式与设备文件名 ...
- POJ 3177 Redundant Paths - from lanshui_Yang
Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...
- IOS基金会_ UICollectionView简单易用
和表格视图类似 UICollectionView的使用有两种方法 一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView. ...
- 使用jQuery和css3实现了仿淘宝ued博客左边的菜单切换动画
今天看到淘宝ued博客的左侧导航菜单的动画好,要使用jQuery和css3我做一个简单的示例,主要用途是实现jQuery 事件和css3 transition属性. 个元素来实现鼠标滑动到某个导航的背 ...