关于事物回滚的问题

li160620 2016-09-08 04:30:41
背景:A表里有三个字段:单号,原料编号,完成状态(有已完成和未完成);
业务流程是分批次加工原材料,如果全部加工完成,勾选已完成复选框,勾选完已完成复选框后,该单号下的原材料状态都更新为已完成。
例如,该原材料分三批加工,第一次为未完成,第二次为未完成,第三次勾选了已完成复选框,保存后,更新第一次第二次的完成状态为已完成。

现在在BLL层写了三个事物 :
第一个事物往表B中插入数据, INSERT
第二个事物是往表A里插入数据,INSERT
第三个事物前有个IF判断,如果是已完成,执行第三个事物
把A表里之前这个单号下所有的信息的完成状态字段更新为已完成。UPDATE

过程:执行上面的例子没有问题,但是如果一次全部加工完成怎么办,第二个事物还没有提交,怎么更新第三个呢
...全文
192 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
li160620 2016-10-21
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
“长的”业务数据处理事务,是现实中的事务,是生活中的事务。而数据库处理的事务概念,是指短促的一瞬间的那种纯计算机领域事务。这两者根本不是一回事。幼稚的人只会抠字眼,而不敢分别地认识。
谢谢!受教了!
  • 打赏
  • 举报
回复
如果,你看完了这些,认为“有道理”但是自己还是再一次问出了“那么用数据库事务机制如何写 BLL 来回滚事务呢?”,这时候就要知道,你已经“上学把脑袋学傻了”,需要清静地想想。要想更好地进行业务逻辑设计,有所创意,必须改变“太技术化”的毛病。
  • 打赏
  • 举报
回复
“长的”业务数据处理事务,是现实中的事务,是生活中的事务。而数据库处理的事务概念,是指短促的一瞬间的那种纯计算机领域事务。这两者根本不是一回事。幼稚的人只会抠字眼,而不敢分别地认识。
  • 打赏
  • 举报
回复
数据事务根本不是这个概念,你这是胡乱套用底层概念。 数据库事务是指在一瞬间(例如500毫秒)之内,同一个客户端会话有2、3条或者更多条命令连续发送,封装为一个事务,达到ACID(要么执行到最后,要么数据完全回滚)。 你说的业务,是保证用户是“键盘侠”能够在一瞬间操作完这三步吗?是用户永远都死板地只执行这三步吗?肯定不是。 根本不是数据库事务,根本不是低级的技术概念,而是业务概念,就不要一点点底层技术概念去设计。你应该从现实中去设计,如果现实的用户体验不可能用低级技术来解决,那么就要用业务流程来设计来解决,也就是用离散的“多个”业务流来解决,而不是用简单的技术语句来解决。 根本谈不上数据库事务。纠结于数据库事务,这就是以技术的脑袋来取代现实的脑袋,就相当于一个疯子他分不清楚镜子中的自己还是真实的自己更加真实,这纯粹是因为没有规范设计思维方式而造成的。

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧