Ik keek naar de hydratatie via constructorpost die wordt gedaan via GetProperties
.
Dus public readonly Sku Sku;
verschijnt niet via classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
omdat het alleen toegankelijk is als ledenveld.
Je kunt het veranderen in public Sku Sku { get; }
dus het wordt gehydrateerd door de constructor via GetProperties
en wijzig alle alleen-lezen velden (Sku - VendorId, Value
&VendorId - Value
velden) om een eigenschap getter methode te hebben.
U moet ook cm.MapProperty(c => c.Identity)
toevoegen dus x=>x.Identity.Equals(entity.Identity)
kan worden geserialiseerd wanneer gebruikt als uitdrukking omdat Identity
kan niet worden gehydrateerd en geregistreerd via ImmutablePocoConvention
omdat het geen constructorarg is wanneer automap-logica wordt uitgevoerd.
Codewijzigingen:
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);
});