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

时间:2017-10-25 15:15:48

标签: 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;
    }

0 个答案:

没有答案