针对.net EF 事物 订单流水号的生成 (一)  的封装。

  数据依然不变。

  1. using System;
  2. using System.Linq;
  3. using System.Transactions;
  4.  
  5. namespace ConsoleApplication1
  6. {
  7. class Program
  8. {
  9. static pengbgDBEntities db = new pengbgDBEntities();
  10. static void Main(string[] args)
  11. {
  12. try
  13. {
  14. DAL dal = new DAL();
  15. dal.AddOrder += dal_AddOrder;
  16. var newOrderNo = dal.Tran(DAL.EnumOrderType.SM);
  17. Console.WriteLine("添加成功:" + newOrderNo);
  18. }
  19. catch (Exception exception)
  20. {
  21. Console.WriteLine(exception.Message);
  22. }
  23. finally
  24. {
  25. Console.WriteLine("按任意键继续");
  26. Console.ReadKey();
  27. }
  28. }
  29.  
  30. static int dal_AddOrder(string orderNo)
  31. {
  32. db.SalesOrder.Add(new SalesOrder() { UserName = Console.ReadLine(), OrderNo = orderNo, OrderDate = DateTime.Now });
  33. return db.SaveChanges();
  34. }
  35. }
  36.  
  37. public class DAL
  38. {
  39. public delegate int DelTranOrder(string orderNo);
  40. public event DelTranOrder AddOrder;
  41. public pengbgDBEntities db = new pengbgDBEntities();
  42.  
  43. public int Add(string orderNo)
  44. {
  45. return AddOrder(orderNo);
  46. }
  47.  
  48. public string BulidOrderNo(EnumOrderType enunType)
  49. {
  50. var orderType = enunType.ToString();
  51. var flowNo = db.FlowNo.FirstOrDefault(x => x.OrderType == orderType);
  52. var flowNoStart = DateTime.Now.ToString("yyMMdd-");
  53. var flowNoEnd = "";
  54. if (flowNo != null)
  55. {
  56. if (flowNo.OrderNo.Split('-')[] != orderType + flowNoStart)
  57. {
  58. flowNoEnd = (int.Parse(flowNo.OrderNo.Split('-')[]) + ).ToString();
  59. }
  60. }
  61. else
  62. {
  63. db.FlowNo.Add(new FlowNo { OrderNo = flowNoStart + flowNoEnd.PadLeft(, ''), OrderType = orderType, Remark = "New" });
  64. }
  65. return orderType + flowNoStart + flowNoEnd.PadLeft(, '');
  66. }
  67.  
  68. public string Tran(EnumOrderType orderType)
  69. {
  70. var newOrderType = BulidOrderNo(orderType);
  71. using (var scope = new TransactionScope())
  72. {
  73. AddOrder(newOrderType);
  74. var flowNo = db.FlowNo.FirstOrDefault(x => x.OrderType == orderType.ToString());
  75. if (flowNo != null)
  76. flowNo.OrderNo = newOrderType;
  77. db.SaveChanges();
  78. scope.Complete();
  79. }
  80. return newOrderType;
  81. }
  82.  
  83. public enum EnumOrderType
  84. {
  85. SM,//销售订单
  86. PM // 外发订单
  87. //......其他
  88. }
  89. }
  90. }

.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. 【C语言探索之旅】 第一部分第九课:函数

    内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  2. 每天进步一点点——Linux文件锁编程flock

    转载请注明出处:http://blog.csdn.net/cywosp/article/details/30083015 1. 场景概述     在多线程开发中.相互排斥锁能够用于对临界资源的保护,防 ...

  3. 行政歌节 &#183; 萧谱1

    4之前听 陈越 的<绿野仙踪> 版权声明:本文博客原创文章,博客,未经同意,不得转载.

  4. Ozmosis实现BIOS直接启动Yosemite,基本完美

    我的主板是 技嘉 z97 d3h,共享一下我制作好的  Ozmosis

  5. Oracle中merge into的使用 (转)

    该命令使用一条语句从一个或者多个数据源中完成对表的更新和插入数据. ORACLE 9i 中,使用此命令必须同时指定UPDATE 和INSERT 关键词,ORACLE 10g 做了如下改动. 1.ins ...

  6. 运行safari提示:无法启动此程序,因为计算机中丢失 QTCF.dll

    解决办法: 1.去百度搜索“QTCF.dll”,找到一个靠谱的下载地址获取到该dll文件: 2.将文件放到 安装目录:Safari\Apple Application Support 下边.

  7. SWFUpload多文件上传 文件数限制 setStats()

    使用swfupload仿公平图片上传 SWFUpload它是基于flash与javascript的client文件上传组件. handlers.js文件 完毕文件入列队(fileQueued) → 完 ...

  8. Codeforces 327B-Hungry Sequence(素数筛)

    B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  9. ssl通关的概念(一个)

    在公司最近的项目涉及多种加密.安全.我一直在这方面缺乏经验.很协议仅仅知道是什么概念.用于传输的加密SSL,也煞费苦心.非常easy一件事,折腾了很长一段时间.IT该行啊,真的是.难者不会,与会者困难 ...

  10. Android处理延迟加载的方法

    在项目开发,通过延时载入来实现满足我们的项目要求.那究竟如何来实现延时.以下结合java与android的相关方法来实现延时问题. 一.利用线程的Sleep方法 <span style=&quo ...