DynamoDB'Type DynamoDBEntry不受支持'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DynamoDB'Type DynamoDBEntry不受支持'相关的知识,希望对你有一定的参考价值。

我正在使用AutoMapper从一种类型映射到它的Dynamo等价物。我想在Dyanmo对象中存储一个列表ob对象,所以我将它的子对象转换为Dynamo Documents。但是,当我尝试使用新类型更新Dynamo时,它会给我这个错误:

类型Amazon.DynamoDBv2.DocumentModel.DynamoDBEntry不受支持,无法实例化

这是我的模型:

public class TourDetail
{
    [DynamoDBHashKey]
    public string TourId { get; set; }
    public DynamoDBList Itinerary { get; set; }
}

这是我的AutoMapper代码:

public DynamoModelMapper()
{
    CreateMap<TourDetail, Models.Dynamo.TourDetail>()
        .ForMember(x => x.Itinerary, x => x.MapFrom(y => convertItinerary(y.Itinerary)));
}

private List<Document> convertItinerary(IEnumerable<TourItineraryDay> itineraryDays)
{
    var docList = new List<Document>();

    foreach (var itineraryDay in itineraryDays)
    {
        var doc = new Document();
        doc.Add("day", itineraryDay.Day);
        doc.Add("title", itineraryDay.Title);
        doc.Add("description", itineraryDay.Description);
        docList.Add(doc);
    }

    return docList;
}
答案

问题是我在我的例子中混合了Dynamo数据模型和文档模型。使用数据模型时,您无需担心将集合转换为特定于Dynamo的类型,如DynamoDBListList<Document>。这些类型是Document模型的一部分,对于数据模型不是必需的。

解决方案是只更改Itinerary模型中的TourDetail属性以键入List<TourItineraryDay>并删除该成员的显式Automapper映射。

public class TourDetail
{
    [DynamoDBHashKey]
    public string TourId { get; set; }
    public List<TourItineraryDay> Itinerary { get; set; }
}

以上是关于DynamoDB'Type DynamoDBEntry不受支持'的主要内容,如果未能解决你的问题,请参考以下文章

可以将HASH密钥更新为预先存在的Dynamodb全局二级索引的另一个属性吗?

Dynamodb 我可以用两个 GSI 查询吗?

DynamoDB 使用 Cloudformation 自动扩展

在 Cloudformation 中创建 DynamoDB 表失败

DynamoDB:查询中的全局二级索引利用率

CloudFormation - 为 DynamoDB 创建表启用 TTL