Díval jsem se na hydrataci prostřednictvím příspěvku konstruktoru, který se provádí pomocí GetProperties
.
Takže public readonly Sku Sku;
nezobrazuje se prostřednictvím classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
protože k němu lze přistupovat pouze jako pole člena.
Můžete jej změnit na public Sku Sku { get; }
takže je hydratován pomocí konstruktoru pomocí GetProperties
a změňte všechna pole pouze pro čtení (Sku - VendorId, Value
&VendorId - Value
polí), abyste měli metodu získávání vlastností.
Také musíte přidat cm.MapProperty(c => c.Identity)
takže x=>x.Identity.Equals(entity.Identity)
lze serializovat při použití jako výraz, protože Identity
nelze hydratovat a registrovat prostřednictvím ImmutablePocoConvention
protože to není arg konstruktoru, když běží logika automatického mapování.
Změny kódu:
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);
});