public async Task SaveAsync(IDatabase db, IContainerTracker <T> tracker, RedisKey key) { foreach (var pi in _items) { await pi.SaveAsync(db, tracker, key); } }
public async Task SaveAsync(IMongoCollection <BsonDocument> collection, IContainerTracker <T> tracker, params object[] keyValues) { if (keyValues.Length == 0) { throw new ArgumentException("At least 1 keyValue required."); } var filter = Builders <BsonDocument> .Filter.Eq("_id", keyValues[0]); var partialKeys = keyValues.Skip(1).ToArray(); UpdateDefinition <BsonDocument> update = null; foreach (var pi in _items) { var updates = pi.SaveChanges(update, tracker, partialKeys); if (updates != null) { if (updates.Count > 1) { for (var i = 0; i < updates.Count - 1; i++) { await collection.UpdateOneAsync(filter, updates[i]); } } update = updates.Last(); } } if (update != null) { await collection.UpdateOneAsync(filter, update); } }
public async Task <int> SaveAsync(DbConnection connection, IContainerTracker <T> tracker, params object[] keyValues) { var sql = BuildSqlForSave(tracker, keyValues); using (var command = _sqlProvider.CreateDbCommand(sql, connection)) { return(await command.ExecuteNonQueryAsync()); } }
public string BuildSqlForSave(IContainerTracker <T> tracker, params object[] keyValues) { var sql = new StringBuilder(); foreach (var pi in _items) { sql.Append(pi.BuildSqlForSave(tracker, keyValues)); } return(sql.ToString()); }
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 IEnumerable <ITracker> GetTrackers(IContainerTracker <T> tracker) { return(_items.Select(item => (ITracker)item.TrackerPropertyInfo.GetValue(tracker))); }