和大家讨论一下 web 系统中 数据库事务问题

2017-03-04 16:02:18 +08:00
 flyingfz

各个方法里,使用 同一个 GetConnection()函数 获取 SqlConnection 。

然后, 当 请求开始的时候, 构造一个 ThreadStatic 的 SqlConnection ,同时在这个 SqlConnection 的实例上 BeginTranstion , 这个 SqlConnection 实例 也就是前面提到 GetConnection() 返回给各个方法的 实例 ,

然后,在请求结束的时候, 如果没有异常,就进行 Commit .

之所以想这么实现,因为在一个 web 请求的过程中,会多次会对数据库进行操作,这些方法可能分布在 各个类中,所以,我想通过这种机制来进行基于 web 请求生命周期的 事务控制。

不知道这样的功能是否实用? 大家怎么看? 或者有什么建议?

2170 次点击
所在节点    .NET
4 条回复
darrenfang
2017-03-04 18:18:12 +08:00
在 Application Service 中进行事务控制。调用 Application Service 的时候开启事务,结束提交事务,异常回滚事务。当然手写这些代码很麻烦,用 AOP 简单很多,例如 Ninject.Extensions.Interception
ihuotui
2017-03-04 18:18:50 +08:00
知道 aop 吗?
wind3110991
2017-03-05 00:20:08 +08:00
对于简单的流程操作,这样的思路是可以的,
但是要记得在 SqlConnection 中加上 mysql_ping(), threadStatic 的 SqlConnection 对超时连接进行重连
flyingfz
2017-03-05 14:26:06 +08:00
多谢回复, 我了解下。 @darrenfang @ihuotui @wind3110991

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/344896

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX