我在应用程序中使用Dynamodb.net。
我有以下代码。
var creds = new BasicAWSCredentials(awsId, awsPassword);
var dynamoClient = new AmazonDynamoDBClient(creds,
awsDynamoDbRegion);
var context = new DynamoDBContext(dynamoClient);
List<ScanCondition> conditions = new List<ScanCondition>();
conditions.Add(new ScanCondition("Id", ScanOperator.Equal, myId));
var response = await context.ScanAsync<Data>(conditions).GetRemainingAsync();
return response;
我的数据模型为:
[DynamoDBTable("MyTable")]
public class Data
{
[DynamoDBHashKey]
public string Id{ get; set; }
public string Name { get; set; }
}
我们将模型“ Data”中的表的表名映射为
[DynamoDBTable("MyTable")]
我们如何不能对此进行硬编码。可以在我自己的实际代码中应用表名,而不是在模型中给出吗?
谢谢
答案 0 :(得分:2)
您正在寻找OverrideTableName
中的DynamoDBOperationConfig
吗?
说明:
表示要保存对象以覆盖表的属性 为该类型声明了DynamoDBTable属性。
示例:
var x = await DbContext.LoadAsync<T>("hash", new DynamoDBOperationConfig {
OverrideTableName = "NewTableName",
IndexName = indexName
});
您正在寻找的可能是DbContext的每个请求的表前缀。它将将此前缀附加到每个表。如果要隔离诸如AppName-MyTable之类的应用程序特定表,则很有用...
示例:
return new DynamoDBContextConfig
{
TableNamePrefix = "MyAppIdentifier",
ConsistentRead = false,
};
答案 1 :(得分:0)
另一个选择是通过以下方式为表使用不同的前缀
Amazon.DynamoDBv2.DataModel.DynamoDBContextConfig.TableNamePrefix
指示DynamoDBContext为所有表名添加特定字符串前缀的属性。 >如果属性为null或为空,则不使用前缀,并使用默认表名。
https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/DynamoDBv2/TDynamoDBContextConfig.html
例如:
var credentials = new StoredProfileAWSCredentials("default");
var client = new AmazonDynamoDBClient(credentials, RegionEndpoint.USEast1);
var config = new DynamoDBContextConfig{
TableNamePrefix = "Test."
};
var ctx = new DynamoDBContext(client, config);
await ctx.SaveAsync(item);