Patrzyłem na nawodnienie przez post konstruktora, który jest wykonywany przez GetProperties
.
Więc public readonly Sku Sku;
nie wyświetla się przez classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
ponieważ jest dostępny tylko jako pole członkowskie.
Możesz go zmienić na public Sku Sku { get; }
więc jest nawadniany przez konstruktor za pomocą GetProperties
i zmień wszystkie pola tylko do odczytu (Sku - VendorId, Value
&VendorId - Value
pola), aby mieć metodę pobierania właściwości.
Ponadto musisz dodać cm.MapProperty(c => c.Identity)
więc x=>x.Identity.Equals(entity.Identity)
może być serializowany, gdy jest używany jako wyrażenie, ponieważ Identity
nie może być nawodniony i zarejestrowany przez ImmutablePocoConvention
ponieważ nie jest to argument konstruktora, gdy działa logika automapy.
Zmiany w kodzie:
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);
});