Entity Framework 拒绝更改后的核心 dbContext 行为
Entity Framework Core dbContext behavior after rejecting changes
我有一个 C# .NET Core API 项目 Entity Framework。
在其中一个 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 所做的编辑?
Change Tracker 仅限于单个 DbContext,应该 仅限于单个 API 请求。此外,您不会创建新的 ChangeTracker。 DbContext 已有一个。
var ChangeTracker = _context.ChangeTracker;
我有一个 C# .NET Core API 项目 Entity Framework。 在其中一个 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 所做的编辑?
Change Tracker 仅限于单个 DbContext,应该 仅限于单个 API 请求。此外,您不会创建新的 ChangeTracker。 DbContext 已有一个。
var ChangeTracker = _context.ChangeTracker;