.net EF 事物 订单流水号的生成 (二):观察者模式、事物、EF
针对.net EF 事物 订单流水号的生成 (一) 的封装。
数据依然不变。
using System;
using System.Linq;
using System.Transactions; namespace ConsoleApplication1
{
class Program
{
static pengbgDBEntities db = new pengbgDBEntities();
static void Main(string[] args)
{
try
{
DAL dal = new DAL();
dal.AddOrder += dal_AddOrder;
var newOrderNo = dal.Tran(DAL.EnumOrderType.SM);
Console.WriteLine("添加成功:" + newOrderNo);
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
finally
{
Console.WriteLine("按任意键继续");
Console.ReadKey();
}
} static int dal_AddOrder(string orderNo)
{
db.SalesOrder.Add(new SalesOrder() { UserName = Console.ReadLine(), OrderNo = orderNo, OrderDate = DateTime.Now });
return db.SaveChanges();
}
} public class DAL
{
public delegate int DelTranOrder(string orderNo);
public event DelTranOrder AddOrder;
public pengbgDBEntities db = new pengbgDBEntities(); public int Add(string orderNo)
{
return AddOrder(orderNo);
} public string BulidOrderNo(EnumOrderType enunType)
{
var orderType = enunType.ToString();
var flowNo = db.FlowNo.FirstOrDefault(x => x.OrderType == orderType);
var flowNoStart = DateTime.Now.ToString("yyMMdd-");
var flowNoEnd = "";
if (flowNo != null)
{
if (flowNo.OrderNo.Split('-')[] != orderType + flowNoStart)
{
flowNoEnd = (int.Parse(flowNo.OrderNo.Split('-')[]) + ).ToString();
}
}
else
{
db.FlowNo.Add(new FlowNo { OrderNo = flowNoStart + flowNoEnd.PadLeft(, ''), OrderType = orderType, Remark = "New" });
}
return orderType + flowNoStart + flowNoEnd.PadLeft(, '');
} public string Tran(EnumOrderType orderType)
{
var newOrderType = BulidOrderNo(orderType);
using (var scope = new TransactionScope())
{
AddOrder(newOrderType);
var flowNo = db.FlowNo.FirstOrDefault(x => x.OrderType == orderType.ToString());
if (flowNo != null)
flowNo.OrderNo = newOrderType;
db.SaveChanges();
scope.Complete();
}
return newOrderType;
} public enum EnumOrderType
{
SM,//销售订单
PM // 外发订单
//......其他
}
}
}
.net EF 事物 订单流水号的生成 (二):观察者模式、事物、EF的更多相关文章
- .net EF 事物 订单流水号的生成 (一)
首先需要 添加 System.Transactions 程序集 数据表: create table SalesOrder ( ID ,) primary key not null, OrderNo ) ...
- 通过序列号Sequence零代码实现订单流水号
序列号管理 本文通过产品编码和订单流水号介绍一下序列号(Sequence)在crudapi中的应用. 概要 序列号 MySQL数据库没有单独的Sequence,只支持自增长(increment)主键, ...
- C#大型电商项目优化(二)——嫌弃EF与抛弃EF
上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...
- 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新
一.基本介绍 回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...
- Javascript生成二维码(QR)
网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...
- 使用jquery.qrcode生成二维码(转)
jQuery 的 qrcode 插件就可以在浏览器端生成二维码图片. 这个插件的使用非常简单: 1.首先在页面中加入jquery库文件和qrcode插件. <script type=" ...
- iOS 生成二维码
首先先下载生成二维码的支持文件 libqrencode 添加依赖库 CoreGraphics.framework. QuartzCore.framework.AVFoundation.framewor ...
- QR code 扩展生成二维码
include './phpqrcode/phpqrcode.php'; //引入QR库 QRcode::png("leo", 'qrcode.png', 'L', 10); ...
- 使用zxing生成二维码
public static Bitmap Create2DCode(String str) throws WriterException { // 生成二维矩阵,编码时 ...
随机推荐
- Centos6.5下一个Ceph存储集群结构
简单的介绍 Ceph的部署模式下主要包括下面几个类型的节点 • Ceph OSDs: A Ceph OSD 进程主要用来存储数据,处理数据的replication,恢复,填充.调整资源组合以及通过检查 ...
- NLP | 自然语言处理 - 解析(Parsing, and Context-Free Grammars)
什么是解析? 在自然语言的学习过程,个人一定都学过语法,比如句子能够用主语.谓语.宾语来表示.在自然语言的处理过程中.有很多应用场景都须要考虑句子的语法,因此研究语法解析变得很重要. 语法解析有两个基 ...
- BZOJ 3589 动态树 树链拆分+纳入和排除定理
标题效果:鉴于一棵树.每个节点有一个右值,所有节点正确启动值他们是0.有两种操作模式,0 x y代表x右所有点的子树的根值添加y. 1 k a1 b1 a2 b2 --ak bk代表质疑. 共同拥有者 ...
- 使用block实现两个页面之间的传统价值观
第二个view声明一个block属性: @property (nonatomic, copy) void(^doTransferMsg)(NSString *_msg); 然后传值方法里检查block ...
- hadoop2.0的datanode数据存储文件夹策略的多个副本
在hadoop2.0在,datanode数据存储盘选择策略有两种方式复制: 首先是要遵循hadoop1.0磁盘文件夹投票,实现类:RoundRobinVolumeChoosingPolicy.java ...
- CPU 风扇清理灰尘加油全过程图解
主机电源风扇因为使用时间长,风扇轴承的润滑油耗尽,导致风扇转速下降或是不转,引起电源热量无法有效排除而造成电脑常常死机,解决的方法有几种. 现图讲解明最简单省钱的办法例如以下: 1.把电源从主机上拆下 ...
- Round #169 (Div. 2)D. Little Girl and Maximum XOR
1.首先是要找到一个位置从左至右,作l这一个是0,r这一个是1. 2.实例01011,10100.你将能够找到01111和10000. #include<cstdio> #include& ...
- CSDN博客ByeBye
情绪csdn定制博客博客是不够的,没有足够的光.对于我这种极简的人,不合适. 我们不打算更新的博客. 至http://blog.edagarli.com/ 版权声明:本文博主原创文章.博客,未经同意不 ...
- Log4j 2.0在具体解释发展先进的使用—SocketAppender远程输出(五岁以下儿童)
Log4j2的Appenders充分考虑输出日志事件.包装和过滤可以被转发,它包含的主要输出到本地文件.输出到远程主机, 文件包.注射.而且,根据该日志文件的时间点.自己主动文件大小的储存条件. 例如 ...
- zju2676 Network Wars 分数规划+网络流
题意:给定无向图,每条边有权值,求该图的一个割集,是的该割集的平均边权最小 Amber的<最小割模型在信息学竞赛中的应用>中讲的很清楚了. 二分答案k,对每条边进行重新赋值为原边权-k,求 ...