拒绝更改后的实体框架核心dbContext行为



我有一个带有实体框架的C#.NET核心API项目。在其中一个API中,有一种特定的情况,我需要中止在数据库上下文中所做的更改,然后在数据库中保存其他不同的数据。

我发现并编辑了一些代码来做到这一点:

public void RejectChanges()
{
var ChangeTracker = new Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker(_context);
foreach (var entry in ChangeTracker.Entries())
{
switch (entry.State)
{
case EntityState.Modified:
case EntityState.Deleted:
entry.State = EntityState.Modified; //Revert changes made to deleted entity.
entry.State = EntityState.Unchanged;
break;
case EntityState.Added:
entry.State = EntityState.Detached;
break;
}
}
}

这似乎有效,但我有一个很大的疑问:如果另一个API将保存它自己的数据,这个操作是否也会影响它的数据,拒绝这些更改?或者,正如我所希望的,它是否只影响调用此方法的API会话?

示例:API 1编辑上下文中的一些数据,然后调用RejectChanges方法。同时,API 2编辑其他数据,并将其保存。从API 1调用的RejectChanges是否也拒绝API 2所做的编辑?

变更跟踪程序的作用域为单个DbContext,将其作用域设为单个API请求。此外,您不会创建新的ChangeTracker。DbContext已有一个。

var ChangeTracker = _context.ChangeTracker;

最新更新