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

Das Element „id“ stimmt mit keinem Feld oder keiner Fehlereigenschaft mit verschachtelten Klassen überein

Lange Rede kurzer Sinn:Es dreht sich alles um Konventionen. Der MongoDB .NET-Treiber macht die statische Klasse ConventionRegistry verfügbar mit dem Sie Ihre eigenen Konventionen registrieren können (mehr hier ). Zusätzlich gibt es zwei "eingebaute" Konventionen __defaults__ und __attributes__ . Tiefer graben (Treiber github ) können Sie feststellen, dass es eine ziemlich interessante Konvention registriert:

new NamedIdMemberConvention(new [] { "Id", "id", "_id" })

Das bedeutet, dass id Mitglieder werden als reguläre BSON _id-Elemente betrachtet.

Wie kann man das beheben?

Sie können Standardkonventionen entfernen

ConventionRegistry.Remove("__defaults__");

Sie werden jedoch automatisch alle anderen Treiberkonventionen fallen lassen, was ziemlich riskant ist. Alternativ können Sie eine gefälschte Eigenschaft erstellen, die immer leer ist:

public class SubServiceDef
{
    [BsonElement("id")]
    public int Id { get; set; }

    [BsonId]
    public ObjectId FakeId { get; set; }
}

oder Sie können einfach BsonNoId verwenden Attribut welches

[BsonNoId]
public class SubServiceDef
{
    [BsonElement("id")]
    public int Id { get; set; }
}

Die Konvention wird also Ihre id setzen als IdMember in der Klassenzuordnung, aber während der Nachbearbeitung erzwingt dieses Attribut, dass IdMember null ist, und Ihre Klasse wird erfolgreich deserialisiert