public void Save()
        {
            // write changes to db
            db.Commit(data);

            // clear unit of work lists
            data = new GenericSet <T>();
        }
        /**
         * Save changes for genericsets to db
         */
        public async void Commit <T>(GenericSet <T> set) where T : class
        {
            if (typeof(T) == typeof(AccountModel))
            {
                Console.WriteLine("Writing changes to AccountModel database...");
                // CREATE
                if (set.NewList.Count > 0)
                {
                    await _bsonuserCollection.InsertManyAsync(ListToBson(set.NewList));
                }

                // UPDATE
                foreach (var doc in set.DirtyList as List <AccountModel> )
                {
                    await _bsonuserCollection.ReplaceOneAsync(Builders <BsonDocument> .Filter.Eq("_id", doc.ID), doc.ToBsonDocument());
                }

                // DELETE
                foreach (var doc in set.RemovedList  as List <AccountModel> )
                {
                    await _bsonuserCollection.DeleteOneAsync(Builders <BsonDocument> .Filter.Eq("_id", doc.ID));
                }
            }

            if (typeof(T) == typeof(MetadataModel))
            {
                Console.WriteLine("Writing changes to Files database...");
                // CREATE
                if (set.NewList.Count > 0)
                {
                    await _bsonfilesCollection.InsertManyAsync(ListToBson(set.NewList));
                }

                // UPDATE
                foreach (var doc in set.DirtyList as List <MetadataModel> )
                {
                    await _bsonfilesCollection.ReplaceOneAsync(Builders <BsonDocument> .Filter.Eq("_id", doc.itemId), doc.ToBsonDocument());
                }

                // DELETE
                foreach (var doc in set.RemovedList as List <MetadataModel> )
                {
                    await _bsonfilesCollection.DeleteOneAsync(Builders <BsonDocument> .Filter.Eq("_id", doc.itemId));
                }
            }
        }
 public DataGateway(DbObj dbObj)
 {
     db   = dbObj;
     data = new GenericSet <T>();
 }