MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Елементът „id“ не съответства на нито едно поле или свойство на грешка с вложени класове

Накратко:всичко е въпрос на конвенции. Драйверът MongoDB .NET разкрива статичен клас ConventionRegistry което ви позволява да регистрирате свои собствени конвенции (още тук ). Освен това има две "вградени" конвенции __defaults__ и __attributes__ . Копаем по-дълбоко (драйвер github ) можете да откриете, че регистрира една доста интересна конвенция:

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

Което означава, че id членовете ще се считат за обикновени BSON _id елементи.

Как да поправя това?

Можете да се отървете от стандартните конвенции

ConventionRegistry.Remove("__defaults__");

Въпреки това автоматично ще премахнете всички други конвенции на драйверите, което е доста рисковано. Като алтернатива можете да създадете фалшиво свойство, което винаги ще бъде празно:

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

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

или можете просто да използвате BsonNoId атрибут which

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

Така че конвенцията ще задава вашия id като IdMember в картата на класа, но след това по време на последваща обработка този атрибут ще принуди IdMember да бъде null и вашият клас ще бъде десериализиран успешно



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Съхраняване на голям файл от 100 MB в Mongodb

  2. По-бърза ли е рамката на Mongodb Aggregation от map/reduce?

  3. MongoSocketReadException:Преждевременно достигнат край на потока (след период на неактивност)

  4. rmongodb поддръжка за MongoDB 3

  5. MongoDB:WriteResult.getN() винаги връща 0?