Saya melihat hidrasi melalui pos konstruktor yang dilakukan melalui GetProperties
.
Jadi public readonly Sku Sku;
tidak muncul melalui classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
karena hanya bisa diakses sebagai member field.
Anda dapat mengubahnya menjadi public Sku Sku { get; }
sehingga terhidrasi melalui konstruktor melalui GetProperties
dan ubah semua bidang hanya-baca (Sku - VendorId, Value
&VendorId - Value
bidang) untuk memiliki metode pengambil properti.
Juga, Anda telah menambahkan cm.MapProperty(c => c.Identity)
jadi x=>x.Identity.Equals(entity.Identity)
dapat diserialkan ketika digunakan sebagai ekspresi karena Identity
tidak dapat dihidrasi dan didaftarkan melalui ImmutablePocoConvention
karena ini bukan argumen konstruktor saat logika peta otomatis berjalan.
Perubahan kode:
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);
});