如何在不使用.net中的属性的情况下映射dynamodb中的类属性

时间:2015-04-06 05:23:30

标签: c# .net amazon-web-services amazon-s3 amazon-dynamodb

我是关于dynamodb的新手。我关注http://www.rkconsulting.com/blog/persistence-model-framework-with-aws-dynamodb 在dynamodb中连接和CRUD操作的分步教程,它的工作正常。

在该教程中,他们使用地图类属性的属性映射

[DynamoDBTable("Dinosaur")]
public class Dinosaur
{
    [DynamoDBHashKey]
    public string Id { get; set; }

    [DynamoDBProperty(AttributeName = "Name")]
    public string Name { get; set; }

    [DynamoDBProperty(AttributeName = "HeightMetres")]
    public double HeightMetres { get; set; }

    [DynamoDBProperty(AttributeName = "WeightKG")]
    public double WeightKg { get; set; }

    [DynamoDBProperty(AttributeName = "Age")]
    public int Age { get; set; }

    [DynamoDBProperty(AttributeName = "Characteristics")]
    public List<string> Characteristics { get; set; }

    [DynamoDBProperty(AttributeName = "Photo", Converter = typeof(ImageConverter))]
    public Image Photo { get; set; }

    [DynamoDBIgnore]
    public int IgnoreMe { get; set; }
}

我的问题是有没有办法在不使用属性的情况下映射类属性?

mongoDb

类似
public class Employee
{
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
}

我们可以用这种方式在一个单独的类

中写这个
BsonClassMap.RegisterClassMap<Employee>(cm => {
  cm.AutoMap();
  cm.IdMemberMap.SetRepresentation(BsonType.ObjectId);
});

在dynamodb中有可能吗?

2 个答案:

答案 0 :(得分:2)

在最新版本的.NET SDK中,您不必放入属性标记,它将看到所有读/写属性并将属性作为相同的名称上传。如果希望DynamoDB中的属性名称不是.NET对象名,则只需使用[DynamoDBProperty(...)]。

因此,在您的情况下,您可以简单地删除除照片之外的所有属性的该属性(需要转换器,您可以删除它的AttributeName部分)和WeightKg(因为大小写不同),您将获得相同的结果。

我现在看到这是一个有点旧的问题,所以在旧版本中可能没有那种方式(不确定),但我使用的是3.3.0.0的SDK,它确实有效。你可能已经继续前进,但正在回答可能遇到这个问题的其他人...

答案 1 :(得分:1)

没有办法,默认&#34;强类型&#34;客户依赖于属性。

如果你有时间亲自进行管道工作,那么就没有什么可以阻止你自己实现POC到Dynamo的映射了。 Amazon客户端api(AWSSDK.DynamoDBv2)公开处理所有API调用的原始类AmazonDynamoDBClient,而DynamoDBConext只是IDynamoDBContext接口的实现 - 它强烈暴露所有&#34;键入&#34;操作。因此,您可以自己实现并采用不同的映射方法。

您还可以为此提出功能请求: https://github.com/aws/aws-sdk-net/issues