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