using MongoDB.Driver; using MongoDbGenericRepository.Models; namespace MongoDbGenericRepository { /// /// The MongoDb context /// public class MongoDbContext : IMongoDbContext { static MongoDbContext() { // Avoid legacy UUID representation: use Binary 0x04 subtype. MongoDefaults.GuidRepresentation = MongoDB.Bson.GuidRepresentation.Standard; } public MongoDbContext(string connectionString, string databaseName) { _client = new MongoClient(connectionString); _database = _client.GetDatabase(databaseName); } private readonly IMongoClient _client; private readonly IMongoDatabase _database; /// /// The private GetCollection method /// /// /// public IMongoCollection GetCollection() { return _database.GetCollection(Pluralize()); } /// /// The private GetCollection method /// /// /// public IMongoCollection GetCollection(TDocument document) where TDocument : IDocument { return _database.GetCollection(PluralizePartitioned(document)); } /// /// Drops a collection, use very carefully. /// /// public void DropCollection() { _database.DropCollection(Pluralize()); } private string Pluralize() { return typeof(TDocument).Name.ToLower() + "s"; } private string PluralizePartitioned(TDocument document) where TDocument : IDocument { return document.PartitionKey + typeof(TDocument).Name.ToLower() + "s"; } } }