Ich habe mir die Hydration per Konstruktor-Post angesehen, was durch GetProperties erfolgt .
Also public readonly Sku Sku; wird nicht durch classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags) angezeigt weil es nur als Elementfeld zugänglich ist.
Sie können es in public Sku Sku { get; } also wird es durch den Konstruktor über GetProperties hydratisiert und ändern Sie alle schreibgeschützten Felder (Sku - VendorId, Value &VendorId - Value Felder), um eine Eigenschafts-Getter-Methode zu haben.
Außerdem müssen Sie cm.MapProperty(c => c.Identity) hinzufügen also x=>x.Identity.Equals(entity.Identity) kann bei Verwendung als Ausdruck serialisiert werden, da Identity kann nicht durch ImmutablePocoConvention hydratisiert und registriert werden da es kein Konstruktor-Argument ist, wenn die Automap-Logik ausgeführt wird.
Codeänderungen:
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);
});