MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

L'élément 'id' ne correspond à aucun champ ou propriété d'erreur avec des classes imbriquées

Pour faire court :tout est une question de conventions. Le pilote MongoDB .NET expose la classe statique ConventionRegistry qui vous permet d'enregistrer vos propres conventions (plus ici ). De plus, il existe deux conventions "intégrées" __defaults__ et __attributes__ . Creuser plus profondément (pilote github ) vous pouvez constater qu'il enregistre une convention assez intéressante :

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

Ce qui signifie que id les membres seront considérés comme des éléments BSON _id normaux.

Comment résoudre ce problème ?

Vous pouvez vous débarrasser des conventions par défaut

ConventionRegistry.Remove("__defaults__");

Cependant, vous supprimerez automatiquement toutes les autres conventions de pilote, ce qui est assez risqué. Vous pouvez également créer une fausse propriété qui sera toujours vide :

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

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

ou vous pouvez simplement utiliser BsonNoId attribut qui

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

La convention définira donc votre id comme IdMember dans le mappage de classe, mais lors du post-traitement, cet attribut forcera IdMember à être nul et votre classe sera désérialisée avec succès