C# 拒绝更改后的实体框架核心dbContext行为
我有一个带有实体框架的C#核心API项目。 在其中一个API中,有一种特殊情况,我需要中止在db上下文中所做的更改,然后在数据库中保存其他不同的数据 我找到并编辑了一些代码来实现这一点:C# 拒绝更改后的实体框架核心dbContext行为,c#,entity-framework,core,dbcontext,C#,Entity Framework,Core,Dbcontext,我有一个带有实体框架的C#核心API项目。 在其中一个API中,有一种特殊情况,我需要中止在db上下文中所做的更改,然后在数据库中保存其他不同的数据 我找到并编辑了一些代码来实现这一点: public void RejectChanges() { var ChangeTracker = new Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker(_context); foreach (var entry in Ch
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要保存它自己的数据,这个操作是否也会影响它的数据,同时拒绝这些更改?或者,如我所愿,if是否只影响调用此方法的API会话
示例:API 1在上下文中编辑一些数据,然后调用RejectChanges方法。同时,API 2编辑其他数据并将保存。从API 1调用的RejectChanges是否也拒绝API 2所做的编辑?更改跟踪器的作用域为单个DbContext,其作用域应为单个API请求。此外,您也不会创建新的ChangeTracker。DbContext已经有一个
var ChangeTracker = _context.ChangeTracker;
同时更改条目。状态不会“还原”任何更改。它只是更改EF将对SaveChanges()执行的操作