首页新闻招聘找找看知识库

net 中 有没有 多个方法放在一个事务中的类呢 不需要用TransactionScope

0
悬赏园豆:15 [已解决问题]

比如 我在一个方法里面 调用了另外2个类的方法, 然后我希望 调用的方法 在同一个事务中,一个方法出错了 另外的方法也不会执行。

不知道各位有没有思路,或者范例。

风格不同的主页 风格不同 | 初学一级 | 园豆:40
提问于:2017-02-17 15:38
< >
分享
最佳答案
0

为什么不用 TransactionScope ?

收获园豆:10
dudu | 高人七级 |园豆:32769 | 2017-02-17 15:54

因为要设置MSDTC 额

风格不同 | 园豆:40 (初学一级) | 2017-02-17 16:10

@风格不同:  这个没有副作用吧? 难道你想写SQL还不愿意装 SQL Server.

沧海一杰 | 园豆:93 (初学一级) | 2017-02-17 16:18

@风格不同: 使用TransactionScope时,如果多个方法使用同一个数据库连接(DbConnection实例),就不会使用MSDTC,参考:How To access multiple SQL Server databases without MS DTC

在ASP.NET Core中,如果用 services.AddScoped() 注入DbContext的实例就可以实现多个方法使用同一个数据库连接。

dudu | 园豆:32769 (高人七级) | 2017-02-17 17:04

@沧海一杰:  - -用的oracle额

风格不同 | 园豆:40 (初学一级) | 2017-02-20 08:11
其他回答(3)
0

为什么不用 TransactionScope,据我所知,这种分布式事务只能用它了

收获园豆:2
沧海一杰 | 园豆:93 (初学一级) | 2017-02-17 15:56
0

听不懂.一个方法出错你抛出异常.另一个方法不久不会执行了.

代码的东西要啥事务..

收获园豆:1
吴瑞祥 | 园豆:23790 (高人七级) | 2017-02-17 16:01

如果几个方法写在一起,中间的方法出错了,前面的不是就提交了

风格不同 | 园豆:40 (初学一级) | 2017-02-17 16:11

@风格不同: 意思就是:你有一个数据访问层.要求能在业务逻辑层控制数据库事务?

吴瑞祥 | 园豆:23790 (高人七级) | 2017-02-17 17:23
0

如果你只涉及到单实例,用SqlConnection.BeginTransaction()也可以。它会返回一个本地事务,然后你代码的其它方法里面的SqlConnection只需要Enlist这个本地事务即可。

例如

在事务开始的地方

var localTxn = conn.BeginTransaction();

MethodA(localTxn)

MethodB(localTxn)

如果你涉及到多实例,只能TransactionScope。

收获园豆:2
c99 | 园豆:1627 (小虾三级) | 2017-02-17 20:03
   您需要登录以后才能回答,未注册用户请先注册