针对.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的更多相关文章

  1. .net EF 事物 订单流水号的生成 (一)

    首先需要 添加 System.Transactions 程序集 数据表: create table SalesOrder ( ID ,) primary key not null, OrderNo ) ...

  2. 通过序列号Sequence零代码实现订单流水号

    序列号管理 本文通过产品编码和订单流水号介绍一下序列号(Sequence)在crudapi中的应用. 概要 序列号 MySQL数据库没有单独的Sequence,只支持自增长(increment)主键, ...

  3. C#大型电商项目优化(二)——嫌弃EF与抛弃EF

    上一篇博文中讲述了使用EF开发电商项目的代码基础篇,提到EF后,一语激起千层浪.不少园友纷纷表示:EF不适合增长速度飞快的互联网项目,EF只适合企业级应用等等. 也有部分高手提到了分布式,确实,性能优 ...

  4. 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新

    一.基本介绍      回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...

  5. Javascript生成二维码(QR)

    网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...

  6. 使用jquery.qrcode生成二维码(转)

    jQuery 的 qrcode 插件就可以在浏览器端生成二维码图片. 这个插件的使用非常简单: 1.首先在页面中加入jquery库文件和qrcode插件. <script type=" ...

  7. iOS 生成二维码

    首先先下载生成二维码的支持文件 libqrencode 添加依赖库 CoreGraphics.framework. QuartzCore.framework.AVFoundation.framewor ...

  8. QR code 扩展生成二维码

    include './phpqrcode/phpqrcode.php';  //引入QR库 QRcode::png("leo", 'qrcode.png', 'L', 10);  ...

  9. 使用zxing生成二维码

    public static Bitmap Create2DCode(String str) throws WriterException {                 // 生成二维矩阵,编码时 ...

随机推荐

  1. Centos6.5下一个Ceph存储集群结构

    简单的介绍 Ceph的部署模式下主要包括下面几个类型的节点 • Ceph OSDs: A Ceph OSD 进程主要用来存储数据,处理数据的replication,恢复,填充.调整资源组合以及通过检查 ...

  2. NLP | 自然语言处理 - 解析(Parsing, and Context-Free Grammars)

    什么是解析? 在自然语言的学习过程,个人一定都学过语法,比如句子能够用主语.谓语.宾语来表示.在自然语言的处理过程中.有很多应用场景都须要考虑句子的语法,因此研究语法解析变得很重要. 语法解析有两个基 ...

  3. BZOJ 3589 动态树 树链拆分+纳入和排除定理

    标题效果:鉴于一棵树.每个节点有一个右值,所有节点正确启动值他们是0.有两种操作模式,0 x y代表x右所有点的子树的根值添加y. 1 k a1 b1 a2 b2 --ak bk代表质疑. 共同拥有者 ...

  4. 使用block实现两个页面之间的传统价值观

    第二个view声明一个block属性: @property (nonatomic, copy) void(^doTransferMsg)(NSString *_msg); 然后传值方法里检查block ...

  5. hadoop2.0的datanode数据存储文件夹策略的多个副本

    在hadoop2.0在,datanode数据存储盘选择策略有两种方式复制: 首先是要遵循hadoop1.0磁盘文件夹投票,实现类:RoundRobinVolumeChoosingPolicy.java ...

  6. CPU 风扇清理灰尘加油全过程图解

    主机电源风扇因为使用时间长,风扇轴承的润滑油耗尽,导致风扇转速下降或是不转,引起电源热量无法有效排除而造成电脑常常死机,解决的方法有几种. 现图讲解明最简单省钱的办法例如以下: 1.把电源从主机上拆下 ...

  7. Round #169 (Div. 2)D. Little Girl and Maximum XOR

    1.首先是要找到一个位置从左至右,作l这一个是0,r这一个是1. 2.实例01011,10100.你将能够找到01111和10000. #include<cstdio> #include& ...

  8. CSDN博客ByeBye

    情绪csdn定制博客博客是不够的,没有足够的光.对于我这种极简的人,不合适. 我们不打算更新的博客. 至http://blog.edagarli.com/ 版权声明:本文博主原创文章.博客,未经同意不 ...

  9. Log4j 2.0在具体解释发展先进的使用—SocketAppender远程输出(五岁以下儿童)

    Log4j2的Appenders充分考虑输出日志事件.包装和过滤可以被转发,它包含的主要输出到本地文件.输出到远程主机, 文件包.注射.而且,根据该日志文件的时间点.自己主动文件大小的储存条件. 例如 ...

  10. zju2676 Network Wars 分数规划+网络流

    题意:给定无向图,每条边有权值,求该图的一个割集,是的该割集的平均边权最小 Amber的<最小割模型在信息学竞赛中的应用>中讲的很清楚了. 二分答案k,对每条边进行重新赋值为原边权-k,求 ...