实体框架核心dbContext拒绝更改后的行为。

问题描述 投票:0回答:1

我有一个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的编辑?

c# entity-framework core dbcontext
1个回答
1
投票

变更跟踪器的范围是一个单一的DbContext,这 的范围是一个单一的API请求。 同时你也不需要创建一个新的ChangeTracker,DbContext已经有一个了。 DbContext已经有了一个。

var ChangeTracker = _context.ChangeTracker;

而且改变Entry.State并不会 "还原 "任何变化,只是改变EF在SaveChanges()上的操作。 它只是改变了EF将在SaveChanges()上采取的操作。

© www.soinside.com 2019 - 2024. All rights reserved.