ABP-多个DbContext实现事物更新
2024-09-05 09:48:23
1.在ABP中其实多个DbContext并没有在同一个事物中执行,那他是如何操作的,我的理解是
- 在不使用事物的时候
把多个DbContext存放在ActiveDbContexts
在调用工作单元的时候。savechange方法会循环这个List
public override void SaveChanges()
{
foreach (var dbContext in GetAllActiveDbContexts())
{
SaveChangesInDbContext(dbContext);
}
}
protected virtual void SaveChangesInDbContext(DbContext dbContext)
{
dbContext.SaveChanges();
}
- 使用事物的时候
var ActiveTransactions = new Dictionary<string, ActiveTransactionInfo>();
然后循环这个 ,一个个commit
public void Commit()
{
foreach (var activeTransaction in ActiveTransactions.Values)
{
activeTransaction.DbContextTransaction.Commit();
foreach (var dbContext in activeTransaction.AttendedDbContexts)
{
if (dbContext.HasRelationalTransactionManager())
{
continue; //Relational databases use the shared transaction
}
dbContext.Database.CommitTransaction();
}
}
}
所有不同数据库的事物 没有在一个事物中实现。
2.如何实现在多个DbContext中实现事物提交
在_unitOfWorkManager中获取的一个Dbcontext,
var strategy = _unitOfWorkManager.Current.GetDbContext<TestDBContext>().Database.CreateExecutionStrategy();
strategy.Execute(() =>
{
using (var transaction = new TransactionScope())
{
_unitOfWorkManager.Current.SaveChanges();
transaction.Complete();
}
});
使用策略事物
最新文章
- 清空form表单
- 「2014-3-13」Javascript Engine, Java VM, Python interpreter, PyPy &ndash; a glance
- SignalR入门之持久性连接
- C# 复制(深拷贝、浅拷贝)
- ms sql server 在abator生成的 insert 无法获取插入 id 的原因
- [转]细说MySQL Explain和Optimizer Trace简介
- 验证SMB登入
- Rake::TestTask 介绍
- js 获取url 参数
- openerp 经典收藏 通过view实现字段的只读、隐藏操作(转载)
- 下破解安装Python开发工具WingIDE4.1
- 利用switch语句计算特定的年份的月份共有几天。
- [zz]npm安装错误解决方法
- jQuery技巧大放送【转】
- SpringMVC轻松学习-SpringMVC介绍(一)
- c#基础知识索引器
- win10的hyper-v共享文件夹
- 使用Swagger自动生成API文档
- Gym 101873G - Water Testing - [皮克定理]
- @NotNull、@NotEmpty、@NotBlank的区别
热门文章
- Python操作pymysql写入数据库时的错误
- jmeter循环和计数器
- Java练习 SDUT-1133_模拟计算器
- POJ-3159_Candies
- Java练习 SDUT-1132_斐波那契数列
- @atcoder - AGC036D@ Negative Cycle
- oracle SELECT子句中避免使用 ‘ * ‘
- @noi.ac - 489@ shuffle
- Project Euler Problem 12-Highly divisible triangular number
- 小程序加载大图片 使用widthFix时,图片先拉伸然后才显示完全