我有一个C#核心API项目与Entity Framework.在这些API之一,有一个特定的情况下,我可以需要中止改变我在我的db上下文,然后保存其他不同的数据在我的数据库。
我找到并编辑了一点代码来做这件事。
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已经有一个了。 DbContext已经有了一个。
var ChangeTracker = _context.ChangeTracker;
而且改变Entry.State并不会 "还原 "任何变化,只是改变EF在SaveChanges()上的操作。 它只是改变了EF将在SaveChanges()上采取的操作。