मैं कंस्ट्रक्टर पोस्ट के माध्यम से हाइड्रेशन को देख रहा था जो 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);
});