public virtual bool TryLoad(IAnchorDataProvider dataProvider, StoreObjectId id, Action <IAnchorStoreObject> streamAction)
        {
            AnchorUtil.ThrowOnNullArgument(dataProvider, "dataProvider");
            AnchorUtil.ThrowOnNullArgument(id, "id");
            bool success = true;

            AnchorUtil.RunTimedOperation(dataProvider.AnchorContext, delegate()
            {
                using (IAnchorStoreObject anchorStoreObject = this.FindStoreObject(dataProvider, id, this.PropertyDefinitions))
                {
                    if (anchorStoreObject.GetValueOrDefault <string>(MigrationBatchMessageSchema.MigrationPersistableDictionary, null) == null)
                    {
                        success = false;
                    }
                    else
                    {
                        anchorStoreObject.Load(this.PropertyDefinitions);
                        if (!this.ReadFromMessageItem(anchorStoreObject))
                        {
                            success = false;
                        }
                        else
                        {
                            if (streamAction != null)
                            {
                                streamAction(anchorStoreObject);
                            }
                            this.LoadLinkedStoredObjects(anchorStoreObject, dataProvider);
                        }
                    }
                }
            }, this);
            return(success);
        }