public object GenerateId(object container, object document) { if (!(container is IMongoCollection <UintKeyTracker> mc)) { throw new ArgumentException("container must be a mongo collection"); } string mcName = mc.CollectionNamespace.FullName; var filter = Builders <UintKeyTracker> .Filter.Exists(t => t.CollectionName == mcName); Monitor.Enter(Lock); var keyTracker = _uintKeyTracker.Find(filter).FirstOrDefault(); if (keyTracker != null) { keyTracker.LastKey++; _uintKeyTracker.ReplaceOne(filter, keyTracker); } else { keyTracker = new UintKeyTracker { CollectionName = mc.CollectionNamespace.CollectionName, LastKey = 1 }; _uintKeyTracker.InsertOne(keyTracker); } Monitor.Exit(Lock); return(keyTracker.LastKey); }
public object GenerateId(object container, object document) { var mc = container as MongoCollection; if (mc == null) { throw new ArgumentException("container must be a mongo collection"); } UintKeyTracker keyTracker = null; Monitor.Enter(Lock); keyTracker = _uintKeyTracker.FindOneByIdAs <UintKeyTracker>(mc.Name); if (keyTracker != null) { keyTracker.LastKey++; } else { keyTracker = new UintKeyTracker { CollectionName = mc.Name, LastKey = 1 }; } _uintKeyTracker.Save(keyTracker); Monitor.Exit(Lock); return(keyTracker.LastKey); }