MongoDbRepository rewrite

This commit is contained in:
alexandre-spieser
2017-08-27 01:54:45 +00:00
parent 6deb1c5ea9
commit ca3c208cca
122 changed files with 124390 additions and 35176 deletions
+49 -13
View File
@@ -1,30 +1,66 @@
using MongoDB.Driver;
using System.Configuration;
using MongoDbGenericRepository.Models;
namespace MongoDbGenericRepository
{
public class MongoDbContext
/// <summary>
/// The MongoDb context
/// </summary>
public class MongoDbContext : IMongoDbContext
{
public const string CONNECTION_STRING_NAME = "MongoDbTest";
public const string DATABASE_NAME = "MongoDbTest";
private static readonly IMongoClient _client;
private static readonly IMongoDatabase _database;
static MongoDbContext()
{
var connectionString = ConfigurationManager.ConnectionStrings[CONNECTION_STRING_NAME].ConnectionString;
// 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(DATABASE_NAME);
_database = _client.GetDatabase(databaseName);
}
private readonly IMongoClient _client;
private readonly IMongoDatabase _database;
/// <summary>
/// The private GetCollection method
/// </summary>
/// <typeparam name="TDocument"></typeparam>
/// <returns></returns>
public IMongoCollection<TDocument> GetCollection<TDocument>()
{
return _database.GetCollection<TDocument>(Pluralize<TDocument>());
}
/// <summary>
/// The private GetCollection method
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <typeparam name="TDocument"></typeparam>
/// <returns></returns>
public IMongoCollection<TEntity> GetCollection<TEntity>()
public IMongoCollection<TDocument> GetCollection<TDocument>(TDocument document) where TDocument : IDocument
{
return _database.GetCollection<TEntity>(typeof(TEntity).Name.ToLower() + "s");
return _database.GetCollection<TDocument>(PluralizePartitioned(document));
}
/// <summary>
/// Drops a collection, use very carefully.
/// </summary>
/// <typeparam name="TDocument"></typeparam>
public void DropCollection<TDocument>()
{
_database.DropCollection(Pluralize<TDocument>());
}
private string Pluralize<TDocument>()
{
return typeof(TDocument).Name.ToLower() + "s";
}
private string PluralizePartitioned<TDocument>(TDocument document) where TDocument : IDocument
{
return document.PartitionKey + typeof(TDocument).Name.ToLower() + "s";
}
}
}