MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Chave composta do MongoDB:InvalidOperationException:{document}.Identity não suportado


Eu estava olhando para a hidratação via post do construtor que é feito através de GetProperties .

Então public readonly Sku Sku; não aparece por meio de classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags) porque só pode ser acessado como campo de membro.

Você pode alterá-lo para public Sku Sku { get; } então é hidratado através do construtor via GetProperties e altere todos os campos somente leitura (Sku - VendorId, Value &VendorId - Value campos) para ter o método getter de propriedade.

Além disso, você deve adicionar cm.MapProperty(c => c.Identity) então x=>x.Identity.Equals(entity.Identity) pode ser serializado quando usado como expressão porque Identity não pode ser hidratado e registrado através do ImmutablePocoConvention pois não é um argumento construtor quando a lógica de automap é executada.

Alterações de código:
public class Sku : Identity<Product>
{
    public VendorId VendorId { get; }
    public string Value { get; }
}

public class VendorId : Identity<Vendor>
{
    public string Value { get; }
}

BsonClassMap.RegisterClassMap<Product>(cm =>
{
   cm.AutoMap();
   cm.MapIdMember(c => c.Sku);
   cm.MapProperty(c => c.Identity);
});