首先需要 添加 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('-')[]) + ;
string newOrderNo;
if (flowNo.OrderNo.Split('-')[] != "SM" + DateTime.Now.ToString("yyMMdd"))
{
newOrderNo = "SM" + DateTime.Now.ToString("yyMMdd-") + .ToString().PadLeft(, '');
}
else
{
newOrderNo = "SM" + DateTime.Now.ToString("yyMMdd-") +
orderNo.ToString().PadLeft(, '');
}
var userName = Console.ReadLine();
var tempModel = db.SalesOrder.FirstOrDefault();
if (tempModel != null)
tempModel.UserName = tempModel.UserName + orderNo.ToString().PadLeft(, '');
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();
} }
}
}

.net EF 事物 订单流水号的生成 (一)的更多相关文章

  1. .net EF 事物 订单流水号的生成 (二):观察者模式、事物、EF

    针对.net EF 事物 订单流水号的生成 (一)  的封装. 数据依然不变. using System; using System.Linq; using System.Transactions; ...

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

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

  3. 使用 EF Power Tool Code Frist 生成 Mysql 实体

    原文:使用 EF Power Tool Code Frist 生成 Mysql 实体 1,在要生成的项目上右键   2,   3,   4,   5,  生成后的效果     已知问题: 1,在Mys ...

  4. php订单号的生成

    来自ECSHOP订单号生成函数:/includes/lib_order.php文件中的get_order_sn() /** * 得到新订单号 * @return string */ function ...

  5. 编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。

    查看本章节 查看作业目录 需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 ...

  6. C# 订单流水号生成

    例如流水号格式如下:XX201604120001,2位前缀加8位日期加4位流水号 首先各种搜索出现如下解决方案 public class SerialNoHelper { /// <summar ...

  7. EF Power Tools 数据库逆向生成时T4模板修改

    VS2013上使用EF Power Tools的Reverse Engineer Code First逆向生成. 发现数据库中的decimal(18, 4)字段在生成的mapping类中没有精度和小数 ...

  8. EF 事物

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  9. 简易发号SQL,可用于生成指定前缀自增序列,如订单号,生成优惠券码等

    需求1:订单号要求唯一.长度不太长.自增.但不能通过早上订单号和晚上订单号相减推算出平台大概一天的单量 需求2:要求生成10w张优惠券,要求券码唯一.不能太长,不能轻易猜测出其他券码 根据这些需求提供 ...

随机推荐

  1. PHP PDO sqlite ,Unable to Open database file的解决方法

    t.php在网站的根目录. fdy.db在inc文件夹下; t.php中sqlite路径写成相对路径 $db = new PDO('sqlite:inc/fdy.db'); 开始提示 Fatal er ...

  2. Red Hat Enterprise Linux Server(RHEL) yum安装软件时This system is not registered with RHN. RHN support will be disabled. 的解决方法(转)

    新安装了redhat6.5.安装后,登录系统,使用yum update 更新系统.提示: This system is not registered to Red Hat Subscription M ...

  3. 基于RDP开源许可rdesktop基本介绍

    **************************************************************************************************** ...

  4. Linux lspci查看硬件设备

    Linux 主机的硬件配备 lspci 找到的是眼下主机上面的硬件配备 [root@www ~]# lspci [-vvn] 选项与參数: -v     :显示很多其它的 PCI 接口装置的具体信息 ...

  5. 写hive sql和shell脚本时遇到几个蛋疼的问题!

    错误一: Hive的where后不能用字段的别名, 错误二: hive的groupby中不能用自己定义函数,否则报错(用嵌套select取代) 错误三: 运行:$ ./hive_game_operat ...

  6. 姿势体系结构的详细解释 -- C

    我基本上总结出以下4部分: 1.问题的足迹大小. 2.字节对齐问题. 3.特别保留位0. 4.这种结构被存储在存储器中的位置. #include <stdio.h> #include &l ...

  7. JSTL实现int数据的类型的长度

    JSTL否int类型转换string该功能.为了解决增益int数据的类型的长度,闹失踪. 得到String的数据的长度是jstl的fn能够${fn:length(string)},但int做数据? 经 ...

  8. Unity3d 导入图像尺寸失真解决方案

    导入到unity3d内的图像被默认长宽变换为满足2^n关系. 例如以下图,我有张图片名称为984plus598表示我尺寸为984*598.拷贝到unity3d中后的大小为1024*512 方法一: 在 ...

  9. datatable1.9 与datatable1.10以数据差异

    我还探讨datatable1.10新用途,如果在下面的代码中的错误,欢迎.. 1.10与1.9解释官方网站之间的差异:http://www.datatables.net/upgrade/1.10 看代 ...

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

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