我已经在DynamoDB中创建了表格,并且我想使用PocoDynamo写信给他们。但是,我需要根据我正在运行的环境在运行时更改表名。我可以在查询时成功执行此操作:
private string _environment = "dev";
private IEnumerable<Television> Load()
{
var db = new PocoDynamo(_client);
var q = db.FromQuery<Television>(q => q.Id == 1);
Decorate(q, _environment);
return q.Exec();
}
private void Decorate<TPoco>(QueryExpression<TPoco> query, string decorator)
{
query.TableName = $"{decorator}-{query.TableName}";
}
这很有效,但我无法在运行时看到如何使用Put和Delete来执行此操作。
有人知道这是否可行?
答案 0 :(得分:0)
我设法通过更改寄存器中的元数据来解决这个问题:
var decorator = "production";
var db = new PocoDynamo(_client);
db.RegisterTable(typeof(Television));
var metaTableData = _pocoDb.GetTableMetadata(type);
metaTableData.Name = $"{decorator}-{metaTableData.Name}";
然后放入和删除工作正常:
// the following will add/delete items with table name "production-Television"
db.PutItems(televisions);
db.DeleteItems<Television>(televisionHashes);
答案 1 :(得分:0)
您还可以动态地为该类型添加别名属性。
即
entityType.AddAttributes(new AliasAttribute(alias));
db.RegisterTable(entityType);
AddAttributes来自ServiceStack.Text PlatformExtensions