in src/Core/Vipr/odataDemo.cs [175:271]
        public DataServiceContextWrapper(Uri serviceRoot, global::Microsoft.OData.Client.ODataProtocolVersion maxProtocolVersion, global::System.Func<global::System.Threading.Tasks.Task<string>> accessTokenGetter)
            : base(serviceRoot, maxProtocolVersion)
        {
            _accessTokenGetter = accessTokenGetter;
            _accessTokenSetter = SetToken;
            
            IgnoreMissingProperties = true;
            BuildingRequest += (sender, args) =>
            {
           
                args.Headers.Add("Authorization", "Bearer " + _accessToken);
                args.Headers.Add("X-ClientService-ClientTag", XClientStringClientTag);
            };
        
            Configurations.RequestPipeline.OnEntryStarting((args) =>
            {
                var entity = (EntityBase)args.Entity;
                if ((!entity.ChangedProperties.IsValueCreated || entity.ChangedProperties.Value.Count == 0))
                {
                    args.Entry.Properties = new ODataProperty[0];
                    return;
                }
                if (!_modifiedEntities.Contains(entity))
                {
                    _modifiedEntities.Add(entity);
                }
                IEnumerable<ODataProperty> properties = new ODataProperty[0];
                if (entity.ChangedProperties.IsValueCreated)
                {
                    properties = properties.Concat(args.Entry.Properties.Where(i => entity.ChangedProperties.Value.Contains(i.Name)));
                }
                args.Entry.Properties = properties;
            });
            Configurations.ResponsePipeline.OnEntityMaterialized((args) =>
            {
                var entity = (EntityBase)args.Entity;
                entity.ResetChanges();
            });
            OnCreated();
        }