そのため、C#AWS SDKforDynamoを利用するモデルリポジトリがあります。今は少し醜いです。結果アイテムをモデルにキャストアウトしたいのですが。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ヘルパーはありますか?上記のループの逆を記述して属性プロパティ名を取得し、N、S、SSタイプなどごとにnullをテストできると思います。
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();