MongoDB kræver, at hvert dokument, der er gemt i databasen, har et felt (på rodniveau) kaldet "_id".
C#-driveren antager, at ethvert felt i din klasse kaldet "Id", "id" eller "_id" er beregnet til at blive afbildet til det specielle "_id"-felt. Dette er en konvention, som kan tilsidesættes. C#-driveren ved ikke, at din Result-klasse ikke er beregnet til at blive brugt som roddokument for en samling, så den finder dit "id"-felt og knytter det til "_id" i databasen.
En måde du kan tilsidesætte dette på er at ændre navnet på feltet i din klasse (som du opdagede). Hvad du så også kan gøre, er at bruge [BsonElement]-attributten til at kortlægge dit C#-feltnavn (f.eks. "idd") til det navn, der rent faktisk bliver brugt i databasen (f.eks. "id"). For eksempel:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Et andet alternativ er at tilsidesætte konventionen, der finder "Id"-medlemmet af en klasse for at undertrykke standardadfærden for C#-driveren for din resultatklasse. Du kan gøre dette ved at registrere en ny ConventionProfil for din resultatklasse. For eksempel:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Du skal være sikker på at gøre dette meget tidligt i dit program, før din resultatklasse bliver kortlagt.