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