MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Chiave composita MongoDB:InvalidOperationException:{document}.L'identità non è supportata

Stavo esaminando l'idratazione tramite il post del costruttore che viene eseguito tramite GetProperties .

Quindi public readonly Sku Sku; non viene visualizzato tramite classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags) perché è accessibile solo come campo membro.

Puoi cambiarlo in public Sku Sku { get; } quindi viene idratato tramite il costruttore tramite GetProperties e cambia tutti i campi di sola lettura (Sku - VendorId, Value &VendorId - Value campi) per avere il metodo getter delle proprietà.

Inoltre, devi aggiungere cm.MapProperty(c => c.Identity) quindi x=>x.Identity.Equals(entity.Identity) può essere serializzato se usato come espressione perché Identity non può essere idratato e registrato tramite ImmutablePocoConvention poiché non è un costruttore arg quando viene eseguita la logica di automap.

Modifiche al codice:

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);
});