Powodem jest to, że format BSON DateTime przechowuje wartości z mniejszą precyzją niż wartość DateTime .NET, więc po odczytaniu jej z bazy danych wartość została obcięta.
Jeśli wartość DateTime jest właściwością klasy C#, którą serializujesz, możesz poprosić serializator o serializację wartości DateTime jako dokumentu osadzonego zawierającego zarówno wartość DateTime BSON (obcięta), jak i oryginalną wartość DateTime platformy .NET (przechowywaną jako Ticks). W takim przypadku wartość nie zostanie obcięta podczas deserializacji.
Na przykład:
public class MyClass {
public ObjectId Id;
[BsonRepresentation(BsonType.Document)]
public DateTime MyDateTime;
}
Możesz także użyć BsonRepresentation of Int64 lub String i nie stracić precyzji, ale wtedy przechowywany dokument tylko ma Ticks lub reprezentację ciągu i nie ma BSON DateTime, co utrudnia wykonywanie zapytań związanych z DateTime.
Należy również pamiętać, że wartości DateTime są przechowywane w bazie danych w formacie UTC. Najlepszą praktyką jest, aby zawsze używać wartości UTC do przechowywania i używać tylko czasu lokalnego podczas wyświetlania ich użytkownikowi.