Årsagen er, at BSON DateTime-formatet gemmer værdier med mindre præcision end en .NET DateTime-værdi, så når du læser den tilbage fra databasen, er værdien blevet afkortet.
Hvis din DateTime-værdi er en egenskab for en C#-klasse, du er ved at serialisere, kan du bede serializeren om at serialisere DateTime-værdien som et indlejret dokument, der indeholder både BSON DateTime-værdien (trunkeret) og den originale .NET DateTime-værdi (gemt som Ticks). I så fald vil værdien ikke blive afkortet, når den deserialiseres.
For eksempel:
public class MyClass {
public ObjectId Id;
[BsonRepresentation(BsonType.Document)]
public DateTime MyDateTime;
}
Du kan også bruge en Bson-repræsentation af Int64 eller String og ikke miste præcision, men så kun det lagrede dokument har flueben eller en strengrepræsentation og ingen BSON DateTime, hvilket gør det svært at udføre DateTime-relaterede forespørgsler.
Du skal også huske på, at DateTime-værdier er gemt i UTC i databasen. Den bedste praksis er altid at bruge UTC-værdier til lagring og kun bruge lokale tider, når de vises for brugeren.