MongoDB vereist dat elk document dat in de database is opgeslagen een veld (op rootniveau) heeft met de naam "_id".
Het C#-stuurprogramma gaat ervan uit dat elk veld in uw klasse met de naam "Id", "id" of "_id" moet worden toegewezen aan het speciale veld "_id". Dit is een conventie, een die kan worden overschreven. Het C#-stuurprogramma weet niet dat uw Result-klasse niet bedoeld is om te worden gebruikt als het hoofddocument van een verzameling, dus vindt het uw "id"-veld en wijst het toe aan "_id" in de database.
Een manier om dit te overschrijven is door de naam van het veld in je klas te veranderen (zoals je hebt ontdekt). Wat u dan ook kunt doen, is het kenmerk [BsonElement] gebruiken om uw C#-veldnaam (bijv. "idd") toe te wijzen aan de naam die daadwerkelijk in de database wordt gebruikt (bijv. "id"). Bijvoorbeeld:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Een ander alternatief is het negeren van de conventie die het "Id"-lid van een klasse vindt om het standaardgedrag van het C#-stuurprogramma voor uw resultaatklasse te onderdrukken. U kunt dit doen door een nieuw ConventionProfile te registreren voor uw Result-les. Bijvoorbeeld:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Je moet er zeker van zijn dat je dit heel vroeg in je programma doet, voordat je resultaatklasse in kaart wordt gebracht.