EF 事物Transaction简单操作
/// <summary>
/// 申请提现
/// </summary>
/// <param name="userId">用户id</param>
/// <param name="amount">提现金额</param>
/// <returns></returns>
public int ApplyTakeCash(int userId, decimal amount)
{
if(IsExistUser(userId)) return -3; //用户不存在
using (var context = new MediaDBContext())
{
var channelUser = context.ChannelUsers.FirstOrDefault(c => c.UserId == userId);
if (channelUser == null) return -3;//用户不存在
var purse = context.BackPurses.FirstOrDefault(c => c.OwnerId == channelUser.LeaderId);
if (purse == null) return -2; //未绑定银行卡
if (purse.Balance < amount) return -1; //余额不足
using (var trans = context.Database.BeginTransaction())
{
string description = string.Format("用户【{0}】申请提现【{1}】元金额", channelUser.User.Mobile, amount);
try
{
var model = new BackWithdrawCash
{
Amount = amount,
ApplicantId = 0,
PurseId = purse.Id,
Remark = description
};
//添加提现申请记录
context.BackWithdrawCashs.Add(model);
//减少提现额度
purse.Balance = purse.Balance - amount;
//提交
int res = context.SaveChanges();
if (res > 0)
{
//添加日志
AddOperateRecord(userId, channelUser.LeaderId, description+"成功");
//提交事物
trans.Commit();
return 1; //提交成功
}
//添加日志
AddOperateRecord(userId, channelUser.LeaderId, description + "失败");
return 0;//提交失败
}
catch (Exception ex)
{
Logger.Error("【TradingServices[ApplyTakeCash]】", ex);
//添加日志
AddOperateRecord(userId, channelUser.LeaderId, string.Format("【{0}】【{1}】",description,ex.Message));
//事物回滚
trans.Rollback();
return 0; //提交失败
}
}
}
}
EF 事物Transaction简单操作的更多相关文章
- SpringBoot事物Transaction实战讲解教程
前言 本篇文章主要介绍的是SpringBoot的事物Transaction使用的教程. SpringBoot Transaction 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码 ...
- HDFS介绍及简单操作
目录 1.HDFS是什么? 2.HDFS设计基础与目标 3.HDFS体系结构 3.1 NameNode(NN)3.2 DataNode(DN)3.3 SecondaryNameNode(SNN)3.4 ...
- x01.MagicCube: 简单操作
看最强大脑,发现魔方还是比较好玩的,便买了一个,对照七步还原法,居然也能成功还原. 为什么不写一个魔方程序呢?在网上找了找,略作修改,进行简单操作,还是不错的,其操作代码如下: protected o ...
- js简单操作Cookie
贴一段js简单操作Cookie的代码: //获取指定名称的cookie的值 function getCookie(objName) { var arrStr = document.cookie.spl ...
- GitHub学习心得之 简单操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 前言 本文对Github的基本操作进行了总结, 主要基于以下文章: http://gitre ...
- Linq对XML的简单操作
前两章介绍了关于Linq创建.解析SOAP格式的XML,在实际运用中,可能会对xml进行一些其它的操作,比如基础的增删该查,而操作对象首先需要获取对象,针对于DOM操作来说,Linq确实方便了不少,如 ...
- Linux 中 Vi 编辑器的简单操作
Linux 中 Vi 编辑器的简单操作 Vi 编辑器一共有3种模式:命名模式(默认),尾行模式,编辑模式.3种模式彼此需要切换. 一.进入 Vi 编辑器的的命令 vi filename //打开或新 ...
- python(pymysql)之mysql简单操作
一.mysql简单介绍 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库 ...
- ZooKeeper系列3:ZooKeeper命令、命令行工具及简单操作
问题导读1.ZooKeeper包含哪些常用命令?2.通过什么命令可以列出服务器 watch 的详细信息?3.ZooKeeper包含哪些操作?4.ZooKeeper如何创建zookeeper? 常用命令 ...
随机推荐
- javascript之判断专题
javascript有数组,对象,函数,字符串,布尔,还有Symbol,set,map,weakset,weakmap. 判断这些东西也是有很多坑,像原生的typeof,instanceOf有一些bu ...
- POJ--3614 Sunscreen(贪心)
题目 3614 Sunscreen 2500*2500直接排序暴力贪心 #include<iostream> #include<cstring> #include<alg ...
- LOJ#2249 购票
解:转移方程写出来,发现是斜率优化.因为在树上,考虑CDQ分治 + 点分治的方法... 每次找到重心,然后先递归解决上面的子树.然后把上面子树的凸包搞出来,下面每个点在凸包上二分找最优决策. 重心自己 ...
- Dreamweaver - <!DOCTYPE html>
最近设计网页,很多使用 <!DOCTYPE html> 关于<!DOCTYPE html>的详细介绍: http://www.w3school.com.cn/tags/tag_ ...
- poj 2385 Apple Catching(记录结果再利用的动态规划)
传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 有两颗苹果树,在每一时刻只有其中一棵苹果树会掉苹果,而Bessie可以在很短的时 ...
- echarts柱状图 渐变色
效果图: var xAxisData = []; var data = []; for (var i = 9; i < 16; i++) { xAxisData.push('5月' + i + ...
- 某些浏览器具有dns缓存功能,大家更改域名指向,建议清理下浏览器缓存
最近遇到一个很郁闷的问题,在我们的的ngnix服务器上原来默认的网址需要更改.更改后,重启了ngnix.可是在客户端使用360浏览器打开网址.地址还是指向旧地址.直接输入服务器 IP地址转向了新地址, ...
- 打印流(PrintWriter )
PrintWriter package cn.lijun.demo1; import java.io.File; import java.io.FileNotFoundException; impor ...
- 10款 Mac 系统优化清理工具软件推荐和下载
本文内容及图片来源[风云社区 SCOEE] 在Windows上有各种安全卫士.系统助手等系统优化和清理工具,比如360安全卫士.腾讯安全管家等,同样MacOS系统也有很多好用的系统优化清理工具,体验比 ...
- request.getSession()几种获取情况之间的差异
一.三种情况如下 HttpSession session = request.getSession(); HttpSession session = request.getSession(true); ...