实体框架核心-仅保存某些DBSet的更改

ahe*_*ick 5 entity-framework entity-framework-core

我正在尝试覆盖SaveChanges方法,以仅保存特定实体的更改。

所以我想打电话 DB.SaveChanges<MyEntity>();

但是,我不想丢失在给定上下文中可能发生的所有先前更改。

我正在做类似下面的事情,但是我的对象值(当前)没有被设置回以前。

需要改变什么?

    public async Task<int> SaveChanges<T>() where T : class
    {
        var original = (from et in this.ChangeTracker.Entries()
                       where !typeof(T).IsAssignableFrom(et.Entity.GetType()) && et.State != EntityState.Unchanged
                       group et by new { et.State, et.CurrentValues } into grp
                       select new
                       {
                           key = grp.Key.State,
                           values = grp.Key.CurrentValues,
                           data = grp
                       }).ToList();

        foreach (var entry in this.ChangeTracker.Entries().Where(x => !typeof(T).IsAssignableFrom(x.Entity.GetType())))
        {
            entry.State = EntityState.Unchanged;
        }

        var rows = await base.SaveChangesAsync();

        foreach (var state in original)
        {
            foreach (var entry in state.data)
            {
                entry.State = state.key;
                entry.CurrentValues.SetValues(state.values);
            }
        }

        return rows;
    }
Run Code Online (Sandbox Code Playgroud)