public TableResult Execute(TableOperation operation)
            {
                TableOperationType     operationType = operation.OperationType;
                ITableEntity           entity        = operation.Entity;
                Tuple <string, string> key;
                IDictionary <string, EntityProperty> writeProperties;

                if (operation.OperationType != TableOperationType.Retrieve)
                {
                    key             = new Tuple <string, string>(entity.PartitionKey, entity.RowKey);
                    writeProperties = entity.WriteEntity(operationContext: null);
                }
                else
                {
                    key             = new Tuple <string, string>(operation.RetrievePartitionKey(), operation.RetrieveRowKey());
                    writeProperties = null;
                }

                switch (operation.OperationType)
                {
                case TableOperationType.Retrieve:
                    TableItem item = _entities[key];

                    // Func<string, string, DateTimeOffset, IDictionary<string, EntityProperty>, string, object>
                    var resolver = operation.RetrieveResolver();

                    return(new TableResult
                    {
                        Result = resolver(operation.RetrievePartitionKey(),
                                          operation.RetrieveRowKey(), item.Timestamp, item.CloneProperties(), item.ETag)
                    });

                case TableOperationType.Insert:
                    if (!_entities.TryAdd(key, new TableItem(writeProperties)))
                    {
                        throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                          "Entity PK='{0}',RK='{1}' already exists.", entity.PartitionKey, entity.RowKey));
                    }
                    return(new TableResult());

                case TableOperationType.Replace:
                    if (entity.ETag == null)
                    {
                        throw new InvalidOperationException("Replace requires an ETag.");
                    }
                    else if (!_entities.TryUpdate(key, new TableItem(writeProperties), new TableItem(entity.ETag)))
                    {
                        if (entity.ETag == "*")
                        {
                            throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                              "Entity PK='{0}',RK='{1}' does not exist.", entity.PartitionKey, entity.RowKey));
                        }
                        else
                        {
                            throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture,
                                                                              "Entity PK='{0}',RK='{1}' does not match eTag '{2}'.", entity.PartitionKey,
                                                                              entity.RowKey, entity.ETag));
                        }
                    }
                    return(new TableResult());

                default:
                    throw new InvalidOperationException(
                              "Unsupported operation type " + operationType.ToString());
                }
            }