GetProperties
を介して行われるコンストラクターポストを介したハイドレーションを見ていました 。
したがって、public readonly Sku Sku;
classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags)
からは表示されません メンバーフィールドとしてのみアクセスできるためです。
public Sku Sku { get; }
そのため、GetProperties
を介してコンストラクターを介してハイドレイトされます すべての読み取り専用フィールドを変更します(Sku - VendorId, Value
&VendorId - Value
フィールド)プロパティゲッターメソッドがあります。
また、cm.MapProperty(c => c.Identity)
を追加する必要があります したがって、x=>x.Identity.Equals(entity.Identity)
Identity
のため、式として使用するとシリアル化できます ImmutablePocoConvention
を介して水分補給および登録することはできません 自動マップロジックの実行時にはコンストラクター引数ではないためです。
コードの変更:
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);
});