public async Task SaveAsync(IDatabase db, IContainerTracker <T> tracker, ITrackableContainer <T> container, RedisKey key) { if (tracker.HasChange == false) { return; } var updates = new List <HashEntry>(); var removes = new List <RedisValue>(); foreach (var item in _items) { var propertyTracker = (ITracker)item.TrackerPropertyInfo.GetValue(tracker); if (propertyTracker.HasChange) { var propertyValue = item.ConvertToRedisValue(item.PropertyInfo.GetValue(container)); if (propertyValue.IsNull) { removes.Add(item.FieldName); } else { updates.Add(new HashEntry(item.FieldName, propertyValue)); } } } if (updates.Any()) { await db.HashSetAsync(key, updates.ToArray()); } if (removes.Any()) { await db.HashDeleteAsync(key, removes.ToArray()); } }
public Task SaveAsync(IDatabase db, ITrackableContainer <T> container, RedisKey key) { return(SaveAsync(db, container.Tracker, container, key)); }