Jag tittade på hydreringen via konstruktörsinlägget som görs genom GetProperties
.
Så public readonly Sku Sku;
visas inte via classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
eftersom det bara kan nås som medlemsfält.
Du kan ändra den till public Sku Sku { get; }
så det hydratiseras genom konstruktorn via GetProperties
och ändra alla skrivskyddade fält (Sku - VendorId, Value
&VendorId - Value
fields) för att ha egenskapsgetter-metoden.
Du måste också lägga till cm.MapProperty(c => c.Identity)
så x=>x.Identity.Equals(entity.Identity)
kan serialiseras när det används som uttryck eftersom Identity
kan inte hydratiseras och registreras genom ImmutablePocoConvention
eftersom det inte är en konstruktor arg när automap logik körs.
Kodändringar:
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);
});