using MongoDB.Driver; using System; using System.Threading.Tasks; using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson.Serialization.Serializers; namespace MongoGuidStandardIssue { [Serializable] public class ReadModel { public ReadModel(Guid id) { Id = id; CreatedDate = DateTimeOffset.UtcNow; } [BsonId] public Guid Id { get; set; } [BsonRepresentation(BsonType.String)] public DateTimeOffset CreatedDate { get; set; } } public sealed class UserReadModel : ReadModel { public string Username { get; set; } public UserReadModel(Guid id) : base(id) { } } public static class Program { public static async Task Main(string[] args) { BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard)); var mongoClient = new MongoClient("mongodb://localhost:32768"); var readStoreDb = mongoClient.GetDatabase("test"); var userReadStore = readStoreDb.GetCollection(nameof(UserReadModel)); var userId = Guid.NewGuid(); var newUser = new UserReadModel(userId) { CreatedDate = DateTimeOffset.UtcNow, Username = "Test " + DateTime.Now.Ticks.ToString() }; var findOneAndReplaceTask = await userReadStore.FindOneAndReplaceAsync(_ => _.Id == newUser.Id, newUser, new FindOneAndReplaceOptions { IsUpsert = true, ReturnDocument = ReturnDocument.After }); Console.WriteLine("Done"); Console.ReadLine(); } } }