MongoDB изисква всеки документ, съхраняван в базата данни, да има поле (на основно ниво), наречено „_id“.
C# драйверът предполага, че всяко поле във вашия клас, наречено "Id", "id" или "_id", е предназначено да бъде картографирано към специалното поле "_id". Това е конвенция, която може да бъде отменена. C# драйверът не знае, че вашият клас Result не е предназначен да се използва като основен документ на колекция, така че намира вашето поле "id" и го съпоставя с "_id" в базата данни.
Един от начините, по който можете да отмените това, е да промените името на полето във вашия клас (както открихте). Това, което можете да направите след това, е да използвате атрибута [BsonElement], за да съпоставите името на полето на C# (напр. „idd“) към каквото име действително се използва в базата данни (напр. „id“). Например:
public class Result
{
[BsonElement("id")]
public int idd; // matches "id" in the database
// other fields
}
Друга алтернатива е да замените конвенцията, която намира члена "Id" на клас, за да потиснете поведението по подразбиране на C# драйвера за вашия клас Result. Можете да направите това, като регистрирате нов ConventionProfile за вашия клас Result. Например:
var noIdConventions= new ConventionProfile();
noIdConventions.SetIdMemberConvention(new NamedIdMemberConvention()); // no names
BsonClassMap.RegisterConventions(noIdConventions, t => t == typeof(Result));
Трябва да сте сигурни, че сте направили това много рано във вашата програма, преди класът ви за резултати да бъде картографиран.