using MongoDB.Driver; using System; using System.Collections.Generic; using System.Text; using Tango.DAL.Entities; namespace Tango.DAL.Mongo { public class MongoUnitOfWork : IUnitOfWork { private IMongoDatabase _database; private MongoClient _client; private IClientSessionHandle _sessionHandler; private bool _commited; private IRepository _organizations; private IRepository _machines; public MongoUnitOfWork(MongoDataBaseSettings settings) { _client = new MongoClient(settings.Address); _database = _client.GetDatabase(settings.DatabaseName); _sessionHandler = _client.StartSession(); } public IRepository Organizations { get { return _organizations ?? new MongoRepository(_database); } } public IRepository Machines { get { return _machines ?? new MongoRepository(_database); } } public void Commit() { _sessionHandler.CommitTransaction(); } public void Dispose() { if (!_commited) { _sessionHandler.AbortTransaction(); } } } }