sql >> Base de Datos >  >> NoSQL >> MongoDB

El elemento 'id' no coincide con ningún campo o propiedad de error con clases anidadas

Para resumir:se trata de convenciones. El controlador MongoDB .NET expone la clase estática ConventionRegistry que le permite registrar sus propias convenciones (más aquí ). Además, hay dos convenciones "incorporadas" __defaults__ y __attributes__ . Profundizando (controlador github ) puede encontrar que registra una convención bastante interesante:

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

Lo que significa que id los miembros serán considerados como elementos regulares BSON _id.

¿Cómo arreglar eso?

Puedes deshacerte de las convenciones predeterminadas

ConventionRegistry.Remove("__defaults__");

Sin embargo, eliminará automáticamente todas las demás convenciones de controladores, lo que es bastante arriesgado. Alternativamente, puede crear una propiedad falsa que siempre estará vacía:

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

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

o simplemente puede usar BsonNoId atributo que

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

Entonces, la convención establecerá su id como IdMember en el mapa de clase, pero luego, durante el procesamiento posterior, este atributo obligará a IdMember a ser nulo y su clase se deserializará con éxito