. net EF core在多个Async函数中使用DbContext.Save()
本文关键字:DbContext Save 函数 core EF Async net | 更新日期: 2023-09-27 18:15:20
我很困惑如何dbcontext.SaveChanges()。根据文档,SaveChanges()应该保存对数据库所做的所有更改。
考虑这样一个情况,我有多个Async函数,它们都针对不同的表。如果他们都试图创建新的条目,但有些需要比别人(由于计算处理等)将第一个函数到达dbcontext.SaveChanges()保存其他异步函数所做的所有更改,无论这些函数是否已经到达SaveChanges部分?
所以我担心的是,在多个异步函数期间,数据将在BusinessFlow之前保存,因为另一个函数说SaveChanges()。
是这种情况,还是他们为每个异步创建一些内部事务范围?
Startup.cs可以在这里找到https://github.com/drakoumel/DatacircleAPI/blob/master/Startup.cs
因此,为了理解所有这些行为,您需要知道如何以及在哪些生命周期内将上下文和存储库注册到DI容器中。
上下文像这样注册:
services.AddDbContext<ApplicationDbContext>(options => options.UseMySql(Configuration["ConnectionStrings:DefaultConnection"]));
如果你看AddDbContext方法的参数,你会看到它有一个contextLifetime参数,默认值为ServiceLifetime.Scoped。所以context是用作用域生存期注册的。
存储库注册为
services.AddScoped<IDatasourceRepository, DatasourceRepository>();
同样适用于作用域生命周期。作用域生命周期是什么意思?它只是意味着在DI容器解析时,每个请求都会创建新对象。因此,现在您知道每个请求都有一个存储库实例和上下文,因此,对控制器操作的不同调用使用不同的上下文实例,因此它们的SaveChanges不会相互干扰。