Stavo esaminando l'idratazione tramite il post del costruttore che viene eseguito tramite GetProperties .
Quindi public readonly Sku Sku; non viene visualizzato tramite classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags) perché è accessibile solo come campo membro.
Puoi cambiarlo in public Sku Sku { get; } quindi viene idratato tramite il costruttore tramite GetProperties e cambia tutti i campi di sola lettura (Sku - VendorId, Value &VendorId - Value campi) per avere il metodo getter delle proprietà.
Inoltre, devi aggiungere cm.MapProperty(c => c.Identity) quindi x=>x.Identity.Equals(entity.Identity) può essere serializzato se usato come espressione perché Identity non può essere idratato e registrato tramite ImmutablePocoConvention poiché non è un costruttore arg quando viene eseguita la logica di automap.
Modifiche al codice:
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);
});