Итак, у меня есть репозиторий моделей, в котором используется C # AWS SDK для Dynamo. Сейчас это немного некрасиво. Я бы хотел отбросить элементы результатов в свою модель. Попасть в «Динамо» - это здорово. Я просто размышляю над своими классами Poco и вставляю их вот так:
var doc = new Document();
foreach (PropertyInfo prop in model.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
var propName = (string)prop.Name;
// dont add if value is null
if (prop.GetValue(model, null) != null)
{
if (prop.PropertyType == typeof(string))
doc[propName] = (string)prop.GetValue(model, null);
if (prop.PropertyType == typeof(List<string>))
doc[propName] = (List<string>)prop.GetValue(model, null);
if (prop.PropertyType == typeof(float))
doc[propName] = (float)prop.GetValue(model, null);
}
}
Но здесь, в репозитории, я бы не хотел писать это уродливое ручное приведение при извлечении элементов. Есть ли помощник AWS, чтобы сделать это менее ручным? Думаю, я мог бы написать обратный цикл выше и получить имена свойств атрибутов, а затем проверить на null для каждого типа N, S, SS и т. д.
var request = new ScanRequest
{
TableName = TableName.User,
};
var response = client.Scan(request);
var collection = (from item in response.ScanResult.Items
from att in item
select new User(att.Value.S, att.Value.N, att.Value.S, att.Value.N, att.Value.S, att.Value.S, att.Value.S, att.Value.S, att.Value.S,
att.Value.S, att.Value.S, att.Value.S, att.Value.S, att.Value.SS, att.Value.SS)).ToList();
return collection.AsQueryable();