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
};
}
}