私は、イベントIDをソートしてDynamoDBテーブルに入れるイベントを生成するコードを作成しています。各イベントに対して一意のイベントIDを生成するには、乱数を生成し、既に存在する場合はDBにクエリします。それが繰り返されない限り、それは繰り返されます。DynamoDBクエリXamarin.Forms
私のDBに問い合わせるのに問題があります。私のコードは動作していないようです。私は、私がすでにKeyConditionExpressionで何を探しているかについて、IndexNameフィールドが何であるかなど、teリクエストを構築する方法を理解するのに問題があります。あなたがDBに私は喜んでそれを考えるだろうたびに見てどのようにない任意のアイデアを持っている場合は
private int getEventID() {
bool isValid = false;
int ranEventID = 0;
while(!isValid) {
isValid = true;
Random random = new Random();
ranEventID = random.Next (0, 5);
QueryEventID (ranEventID);
foreach (int i in _lstEventID) {
if (ranEventID == i)
isValid = false;
}
}
return ranEventID;
}
private async void QueryEventID(int ranEventID) {
_lstEventID = new ObservableCollection<int>();
using(App.client) {
var queryResponse = await App.client.QueryAsync(new QueryRequest() {
TableName = "Events",
IndexName = "EventID",
KeyConditionExpression = "EventID = :v_Id",
ExpressionAttributeValues = new Dictionary < string, AttributeValue > {
{
":v_Id", new AttributeValue {
N = ranEventID.ToString()
}
}
}
});
queryResponse.Items.FirstOrDefault((i) => { //This is a workaround for foreach loop with Linq. Could not do .ToList().ForEach
_lstEventID.Add(Int32.Parse(i["EventID"].N));
return false;
});
}
}
:
はここでAWSのドキュメントに触発された私のコードです。 _lstEventはintである可能性がありますが、理由はObservableCollectionである必要があります。
代わりに「乱数」の、それは「ユニーク」になり、あなたがする必要はありませんよう、あなたが 'GUID'(' System.Guid.NewGuid')を使用して検討しています挿入の前にデータベースを検索します。 – SushiHangover
これまで聞いたことがありません。 Googleの後、それは決して別のものと同じになることはありませんか?もしそうなら、私は間違いなくそれを使用します。しかし、クエリがうまくいかない理由を知っていますか? –
Microsoft(およびその他の技術界の他の国)はGUID/UUID/etcを長時間使用していますが、それらを一意であると信じることができます;-) – SushiHangover