Beispiel #1
0
        private static void BuildTrackablePocoProperty <TPoco>(PropertyItem item,
                                                               RedisTypeConverter typeConverter)
            where TPoco : ITrackablePoco <TPoco>
        {
            var mapper = new TrackablePocoRedisMapper <TPoco>(typeConverter);

            item.Mapper = mapper;

            item.CreateAsync = (db, container, key) =>
            {
                var value = (TPoco)item.PropertyInfo.GetValue(container);
                return(mapper.CreateAsync(db, value, key.Append(item.KeySuffix)));
            };
            item.DeleteAsync = (db, key) =>
            {
                return(mapper.DeleteAsync(db, key.Append(item.KeySuffix)));
            };
            item.LoadAsync = (db, container, key) =>
            {
                var value = (TPoco)item.PropertyInfo.GetValue(container);
                // when there is no entry for poco, it is regarded as non-existent container.
                return(mapper.LoadAsync(db, value, key.Append(item.KeySuffix)));
            };
            item.SaveAsync = async(db, tracker, key) =>
            {
                var valueTracker = (TrackablePocoTracker <TPoco>)item.TrackerPropertyInfo.GetValue(tracker);
                if (valueTracker.HasChange)
                {
                    await mapper.SaveAsync(db, valueTracker, key.Append(item.KeySuffix));
                }
            };
        }