sql >> Base de Datos >  >> NoSQL >> MongoDB

Clave compuesta de MongoDB:InvalidOperationException:{document}. La identidad no es compatible

Estaba mirando la hidratación a través de la publicación del constructor que se realiza a través de GetProperties .

Así que public readonly Sku Sku; no aparece a través de classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags) porque solo se puede acceder como campo miembro.

Puede cambiarlo a public Sku Sku { get; } por lo que se hidrata a través del constructor a través de GetProperties y cambie todos los campos de solo lectura (Sku - VendorId, Value &VendorId - Value campos) para tener un método de captación de propiedades.

Además, debe agregar cm.MapProperty(c => c.Identity) entonces x=>x.Identity.Equals(entity.Identity) se puede serializar cuando se usa como expresión porque Identity no se puede hidratar y registrar a través de ImmutablePocoConvention ya que no es un argumento de constructor cuando se ejecuta la lógica de asignación automática.

Cambios 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);
});