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";
}
}
}