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

L'elemento 'id' non corrisponde ad alcun campo o proprietà di errore con le classi nidificate

Per farla breve:si tratta di convenzioni. Il driver MongoDB .NET espone la classe statica ConventionRegistry che ti consente di registrare le tue convenzioni (altro qui ). Inoltre ci sono due convenzioni "integrate" __defaults__ e __attributes__ . Scavo più a fondo (driver github ) puoi scoprire che registra una convenzione piuttosto interessante:

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

Ciò significa che id i membri saranno considerati come normali elementi BSON _id.

Come risolverlo?

Puoi eliminare le convenzioni predefinite

ConventionRegistry.Remove("__defaults__");

Tuttavia, automaticamente eliminerai tutte le altre convenzioni del driver, il che è piuttosto rischioso. In alternativa puoi creare una proprietà fake che sarà sempre vuota:

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

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

oppure puoi semplicemente usare BsonNoId attributo quale

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

Quindi la convenzione imposterà il tuo id come IdMember nella mappa della classe, ma durante la post-elaborazione questo attributo forzerà IdMember a essere nullo e la tua classe verrà deserializzata con successo