protected override Task <CrudResult <bool> > PersistDeleteEntityAsync(Core.Models.Tag entity)
 {
     return(mongoDatabase.GetCollection <Core.Models.Tag>(this.tableName).DeleteOneAsync(user => user.Id == entity.Id).ContinueWith(resultTask =>
     {
         if (!resultTask.IsFaulted)
         {
             return CrudResult <bool> .Success(true);
         }
         throw resultTask.Exception;
     }));
 }
        protected override Task <CrudResult <string> > PersistAddEntityAsync(Core.Models.Tag entity)
        {
            TaskCompletionSource <CrudResult <string> > tcs = new TaskCompletionSource <CrudResult <string> >();

            mongoDatabase.GetCollection <Core.Models.Tag>(this.tableName).InsertOneAsync(entity).ContinueWith(resultTask => {
                if (resultTask.IsFaulted)
                {
                    MongoCommandException mongoException = resultTask.Exception?.InnerException as MongoCommandException;
                    if (mongoException != null && mongoException.CodeName == "OperationNotSupportedInTransaction")
                    {
                        try
                        {
                            mongoDatabase.CreateCollection(tableName);
                            List <CreateIndexModel <Core.Models.Tag> > indexModelList = new List <CreateIndexModel <Core.Models.Tag> >();



                            ////adding userId as Index
                            var userIdIndexKey   = Builders <Core.Models.Tag> .IndexKeys.Ascending(new StringFieldDefinition <Core.Models.Tag>($"{nameof(Core.Models.Tag.UserId)}"));
                            var userIdIndexModel = new CreateIndexModel <Core.Models.Tag>(userIdIndexKey);
                            indexModelList.Add(userIdIndexModel);

                            ////adding name as Index
                            var nameIndexKey   = Builders <Core.Models.Tag> .IndexKeys.Ascending(new StringFieldDefinition <Core.Models.Tag>($"{nameof(Core.Models.Tag.Name)}"));
                            var nameIndexModel = new CreateIndexModel <Core.Models.Tag>(nameIndexKey);
                            indexModelList.Add(nameIndexModel);


                            //adding all the indexes.
                            mongoDatabase.GetCollection <Core.Models.Tag>(this.tableName).Indexes.CreateMany(indexModelList);
                        }
                        catch (Exception ex)
                        {
                            tcs.SetException(ex);
                        }
                    }

                    tcs.SetException(resultTask.Exception);
                }
                else
                {
                    tcs.SetResult(CrudResult <String> .Success(entity.Id));
                }
            });
            return(tcs.Task);
        }