Je regardais l'hydratation via la publication du constructeur qui se fait via GetProperties
.
Donc public readonly Sku Sku;
n'apparaît pas via classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
car il n'est accessible qu'en tant que champ membre.
Vous pouvez le changer en public Sku Sku { get; }
il est donc hydraté via le constructeur via GetProperties
et modifiez tous les champs en lecture seule (Sku - VendorId, Value
&VendorId - Value
champs) pour avoir la méthode getter de propriété.
Aussi, vous devez ajouter cm.MapProperty(c => c.Identity)
donc x=>x.Identity.Equals(entity.Identity)
peut être sérialisé lorsqu'il est utilisé comme expression car Identity
ne peut pas être hydraté et enregistré via ImmutablePocoConvention
car ce n'est pas un argument de constructeur lorsque la logique de mappage automatique s'exécute.
Changements de code :
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);
});