首页 > 解决方案 > 拒绝更改后的 Entity Framework Core dbContext 行为

问题描述

我有一个带有实体框架的 C# .NET Core 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 所做的编辑?

标签: c#entity-framework-coredbcontext

解决方案


The Change Tracker is scoped to a single DbContext, which should be scoped to a single API request. Also you don't create a new ChangeTracker. The DbContext already has one.

var ChangeTracker = _context.ChangeTracker;

Also changing the Entry.State doesn't "revert" any changes. It just changes what action EF will take on SaveChanges().


推荐阅读