DynamicTableEntity PartitionKey и RowKey

Я создаю DynamicTableEntity следующим образом:

string env = "envTest";
stting ver = "1.0";
siring id = "12356";
string mode = "verify";
DynamicTableEntity entryEntity = DynamicTableEntity(env,ver);
entryEntity.Properties.Add("Id", id);
entryEntity.Properties.Add("Mode", mode);

В результате создал таблицу со столбцами:"Id", "Mode", "PartitionKey", "RowKey". Я хочу изменить имена "PartitionKey", "RowKey", т.е. я хочу, чтобы env был sectionKey, но но Имя столбца должно быть "Env". Как мне это сделать?

2 ответа

Решение

Простой ответ заключается в том, что вы не можете. PartitionKey а также RowKey системные атрибуты (наряду с Timestamp) и вы не можете изменить их имя. Что вы можете сделать, это определить еще два пользовательских атрибута для Env а также Ver если вам нужно получить доступ к свойствам по этим именам в вашем приложении.

DynamicTableEntity entryEntity = DynamicTableEntity(env,ver);
entryEntity.Properties.Add("Id", id);
entryEntity.Properties.Add("Mode", mode);
entryEntity.Properties.Add("Env", env);
entryEntity.Properties.Add("Ver", ver);

Хотя это правда, что вы не можете переименовать PartitionKey и RowKey, вы можете перейти к DTO прямо из таблицы.

Я считаю, что это супер удобно для проецирования данных на разные аудитории (то есть ограниченное представление для не-администраторов и т. Д.)

НТН

var query = MyEntityDBO.CreateQuery<DynamicTableEntity>()
            .Where(x => x.PartitionKey.Equals("Blah"))
            .Resolve(MyEntityDTO.GetEntityResolver());
var segment = await query.ExecuteSegmentedAsync(new TableContinuationToken());
if(segment.Results.Count > 0) {
     // Results = IEnumerable<MyEntityDTO>
}

public class MyEntityDTO
{
    public string Id { get; set; }
    public string Mode { get; set;  }
    public string Env { get; set; }
    public string Ver { get; set; }

    public static EntityResolver<MyEntityDTO> GetEntityResolver()
    {
        return (pk, rk, ts, props, etag) =>
        { 
             Env = pk,
             Ver = rk,
             Id = props["Id"].StringValue,
             Mode = props["Mode"].StringValue
        };
    }
}
Другие вопросы по тегам