我试图覆盖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;
}