DynamoDB 属性
このセクションでは、クラスとプロパティを DynamoDB のテーブルや属性にマッピングできるように、オブジェクト永続性モデルで提供されている属性を説明します。
注記
次の属性では、DynamoDBTable
と DynamoDBHashKey
だけが必須です。
DynamoDBGlobalSecondaryIndexHashKey
グローバルセカンダリインデックスのパーティションキーに、クラスプロパティをマッピングします。この属性は、グローバルセカンダリインデックスを Query
する必要がある場合に使用します。
DynamoDBGlobalSecondaryIndexRangeKey
グローバルセカンダリインデックスのソートキーにクラスプロパティをマッピングします。この属性は、グローバルセカンダリインデックスを Query
し、インデックスソートキーを使用して結果を絞り込む必要がある場合に使用します。
DynamoDBHashKey
テーブルのプライマリキーのパーティションキーにクラスプロパティをマッピングします。プライマリキーの属性をコレクション型にすることはできません。
次の C# サンプルコードでは、Book
クラスを ProductCatalog
テーブルに、Id
プロパティをテーブルのプライマリキーのパーティションキーにマッピングしています。
[DynamoDBTable("ProductCatalog")] public class Book { [DynamoDBHashKey] public int Id { get; set; } // Additional properties go here. }
DynamoDBIgnore
関連するプロパティを無視するように指示します。クラスプロパティを保存しない場合は、この属性を追加することで、テーブルにオブジェクトを保存するときにこのプロパティを含めないように DynamoDBContext
に指示できます。
DynamoDBLocalSecondaryIndexRangeKey
ローカルセカンダリインデックスのソートキーにクラスプロパティをマッピングします。この属性は、ローカルセカンダリインデックスを Query
し、インデックスソートキーを使用して結果を絞り込む必要がある場合に使用します。
DynamoDBProperty
テーブルの属性にクラスプロパティをマッピングします。クラスプロパティを同じ名前のテーブル属性にマッピングする場合は、この属性を指定する必要はありません。ただし名前が異なる場合は、このタグを使用してマッピングを指定できます。次の C# ステートメントでは、DynamoDBProperty
によって、BookAuthors
プロパティがテーブル内の Authors
属性にマッピングされています。
[DynamoDBProperty("Authors")] public List<string> BookAuthors { get; set; }
DynamoDBContext
はこのマッピング情報を使用して、対応するテーブルにオブジェクトデータを保存するときに Authors
属性を作成します。
DynamoDBRenamable
クラスプロパティの代替名を指定します。これは、テーブル属性がクラスプロパティの名前と異なる DynamoDB テーブルに、任意データをマッピングするためのカスタムコンバーターを記述する場合に役立ちます。
DynamoDBRangeKey
テーブルのプライマリキーのソートキーにクラスプロパティをマッピングします。テーブルに複合プライマリキー (パーティションキーおよびソートキー) がある場合は、クラスマッピングで、DynamoDBHashKey
と DynamoDBRangeKey
の両方の属性を指定する必要があります。
たとえば、サンプルテーブルの Reply
には、Id
パーティションキーと Replenishment
ソートキーで構成されたプライマリキーがあります。次の C# サンプルコードでは、Reply
クラスを Reply
テーブルにマッピングします。クラス定義では、プロパティのうち 2 つがプライマリキーにマッピングされることも示しています。
サンプルテーブルの詳細については、「DynamoDB でのコード例用のテーブルの作成とデータのロード」を参照してください。
[DynamoDBTable("Reply")] public class Reply { [DynamoDBHashKey] public int ThreadId { get; set; } [DynamoDBRangeKey] public string Replenishment { get; set; } // Additional properties go here. }
DynamoDBTable
クラスがマッピングされる、DynamoDB 内のターゲットテーブルを識別します。例えば次の C# サンプルコードでは、Developer
クラスを DynamoDB の People
テーブルにマッピングしています。
[DynamoDBTable("People")] public class Developer { ...}
この属性は、継承またはオーバーライドすることができます。
-
DynamoDBTable
属性は継承できます。前述の例では、Lead
クラスから継承された新しいクラスDeveloper
を追加すると、People
テーブルにもマッピングされます。Developer
テーブルにLead
とPeople
の両方のオブジェクトが格納されます。 -
DynamoDBTable
属性もオーバーライドできます。次の C# サンプルコードでは、Manager
クラスは、Developer
クラスから継承されます。ただし、DynamoDBTable
属性を明示的に追加すると、クラスは別のテーブル (Managers
) にマップされます。[DynamoDBTable("Managers")] public class Manager : Developer { ...}
次の C# の例に示すように、オプションのパラメータ LowerCamelCaseProperties
を追加すると、オブジェクトをテーブルに格納する際にプロパティ名の先頭文字を小文字にするよう、DynamoDB にリクエストを送ることができます。
[DynamoDBTable("People", LowerCamelCaseProperties=true)] public class Developer { string DeveloperName; ... }
Developer
クラスのインスタンスを保存する場合、DynamoDBContext
では DeveloperName
プロパティが developerName
として保存されます。
DynamoDBVersion
項目のバージョン番号を格納するクラスプロパティを識別します。バージョニングの詳細については、「DynamoDB で AWS SDK for .NET のオブジェクト永続性モデルを使用した、バージョン番号による楽観的ロック」を参照してください。