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