zoukankan      html  css  js  c++  java
  • .net EF 事物 订单流水号的生成 (一)

    首先需要 添加 System.Transactions 程序集

    数据表:

    create table SalesOrder
    (
    ID int identity(1,1) primary key not null,
    OrderNo nvarchar(50) not null,
    OrderDate datetime not null,
    UserName nvarchar(50) not null
    )
    
    
    create table FlowNo
    (
    ID int identity(1,1) primary key not null,
    OrderNo nvarchar(50) not null,
    OrderType nvarchar(50) not null,
    Remark nvarchar(50) not null
    )
    insert FlowNo values ('SM160309-00001','SM','销售订单')

    控制台测试程序。

    测试的时候 ,可以 输入 userName ,最大字符为50,可以测试 输入50个字符以上的用户名,会发现

      var tempModel = db.SalesOrder.FirstOrDefault();
                                if (tempModel != null)
                                    tempModel.UserName = tempModel.UserName + orderNo.ToString().PadLeft(5, '0');
                                db.SaveChanges();
    这段代码 没有 效果了。虽然是后面的代码报错,第一行的数据不会发生改变。
    using System;
    using System.Linq;
    using System.Transactions;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    using (var tran = new TransactionScope())
                    {
                        using (var db = new pengbgDBEntities())
                        {
                            var flowNo = db.FlowNo.FirstOrDefault(x => x.OrderType == "SM");
                            if (flowNo != null)
                            {
                                var orderNo = int.Parse(flowNo.OrderNo.Split('-')[1]) + 1;
                                string newOrderNo;
                                if (flowNo.OrderNo.Split('-')[0] != "SM" + DateTime.Now.ToString("yyMMdd"))
                                {
                                    newOrderNo = "SM" + DateTime.Now.ToString("yyMMdd-") + 1.ToString().PadLeft(5, '0');
                                }
                                else
                                {
                                    newOrderNo = "SM" + DateTime.Now.ToString("yyMMdd-") +
                                                 orderNo.ToString().PadLeft(5, '0');
                                }
                                var userName = Console.ReadLine();
                                var tempModel = db.SalesOrder.FirstOrDefault();
                                if (tempModel != null)
                                    tempModel.UserName = tempModel.UserName + orderNo.ToString().PadLeft(5, '0');
                                db.SaveChanges();
                                db.SalesOrder.Add(new SalesOrder
                                {
                                    OrderDate = DateTime.Now,
                                    OrderNo = newOrderNo,
                                    UserName = userName
                                });
                                db.SaveChanges();
    
                                flowNo.OrderNo = newOrderNo;
                                db.SaveChanges();
                            }
                        }
                        tran.Complete();
                        Console.WriteLine("操作成功");
                    }
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.Message);
                }
                finally
                {
                    Console.WriteLine("按任意键继续");
                    Console.ReadKey();
                }
    
            }
        }
    }
  • 相关阅读:
    mysql 数据丢失更新的解决方法
    session springboot 会话共享实现
    java web cors-filter 跨域开源库springboot 配置
    redis 持久化数据保存RDB&AOF
    JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510) 解决
    springboot 配置启动非web applicationContexnt
    nginx session 配置失效解决
    sqlplus 的安装和配置
    文件下载在前端显示乱码的问题
    java Classpath 的解读
  • 原文地址:https://www.cnblogs.com/bingguang/p/5257206.html
Copyright © 2011-2022 走看看