Entity Framework Core поведение dbContext после отклонения изменений - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть C# Core API проект с Entity Framework. В одном из этих API есть конкретный случай c, в котором мне может понадобиться прервать изменение, которое я сделал в моем контексте БД, и затем сохранить другие различные данные в моей базе данных.

Я нашел и отредактировал немного кода, чтобы сделать это:

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 собирается сохранить свои собственные данные, влияет ли эта операция также на свои данные, отклоняя также эти изменения? Или я, как wi sh, влияет ли это только на сеанс API, вызвавший этот метод?

ПРИМЕР: API 1 редактирует некоторые данные в контексте, затем вызывает метод RejectChanges. Между тем, API 2 редактирует другие данные и собирается их сохранить. Вызывает ли RejectChanges из API 1 также изменения, сделанные API 2?

1 Ответ

1 голос
/ 24 апреля 2020

Отслеживание изменений относится к одному DbContext, который должен быть привязан к одному запросу API. Также вы не создаете новый ChangeTracker. DbContext уже имеет его.

var ChangeTracker = _context.ChangeTracker;

Также изменение Entry.State не «отменяет» никаких изменений. Он просто меняет действие EF над SaveChanges ().

...