MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Zusammengesetzter MongoDB-Schlüssel:InvalidOperationException:{document}.Identity wird nicht unterstützt

Ich habe mir die Hydration per Konstruktor-Post angesehen, was durch GetProperties erfolgt .

Also public readonly Sku Sku; wird nicht durch classMap.ClassType.GetTypeInfo().GetProperties(_bindingFlags) angezeigt weil es nur als Elementfeld zugänglich ist.

Sie können es in public Sku Sku { get; } also wird es durch den Konstruktor über GetProperties hydratisiert und ändern Sie alle schreibgeschützten Felder (Sku - VendorId, Value &VendorId - Value Felder), um eine Eigenschafts-Getter-Methode zu haben.

Außerdem müssen Sie cm.MapProperty(c => c.Identity) hinzufügen also x=>x.Identity.Equals(entity.Identity) kann bei Verwendung als Ausdruck serialisiert werden, da Identity kann nicht durch ImmutablePocoConvention hydratisiert und registriert werden da es kein Konstruktor-Argument ist, wenn die Automap-Logik ausgeführt wird.

Codeänderungen:

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