Jeg kiggede på hydreringen via konstruktørindlæg, som er udført gennem GetProperties
.
Så offentlig skrivebeskyttet Sku Sku;
vises ikke gennem classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
fordi det kun kan tilgås som medlemsfelt.
Du kan ændre det til public Sku Sku { get; } så det er hydreret gennem constructor via
GetProperties
og ændre alle skrivebeskyttede felter (Sku - VendorId, Value
&VendorId - Værdi
felter) for at have egenskabsgetter-metoden.
Du skal også tilføje cm.MapProperty(c => c.Identity)
så x=>x.Identity.Equals(entity.Identity)
kan serialiseres, når det bruges som udtryk, fordi Identitet
kan ikke hydreres og registreres gennem ImmutablePocoConvention
da det ikke er et constructor-arg, når automap-logik kører.
Kodeændringer:
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);
});