/// <summary>
        /// Write to datasource overload with datatype operations
        /// </summary>
        /// <param name="dataTypeWriteOperations">collection of datatype operations</param>
        /// <returns></returns>
        public ICollection <OperationResult> WriteToDataSource(ICollection <DataTypeWriteOperation> dataTypeWriteOperations)
        {
            //Implementation is required in order to use data structures
            ICollection <OperationResult> dtOperationResults = new List <OperationResult>();

            foreach (var dtOperation in dataTypeWriteOperations)
            {
                OperationResult opResult = new OperationResult(dtOperation, OperationResult.Status.Success, "");
                try
                {
                    switch (dtOperation.OperationType)
                    {
                    case DatastructureOperationType.CreateDataType:
                        IDictionary <string, ProviderItemBase> dict = new Dictionary <string, ProviderItemBase>();
                        dict.Add(dtOperation.Key, dtOperation.ProviderItem);
                        PersistenceProvider.Insert(dict);
                        break;

                    case DatastructureOperationType.DeleteDataType:
                        PersistenceProvider.Remove(new string[] { dtOperation.Key });
                        break;

                    case DatastructureOperationType.AddToDataType:

                        PersistenceProvider.AddToDataType(dtOperation.Key, dtOperation.ProviderItem, dtOperation.DataType);
                        break;

                    case DatastructureOperationType.UpdateDataType:
                        PersistenceProvider.UpdateToDataType(dtOperation.Key, dtOperation.ProviderItem, dtOperation.DataType);
                        break;

                    case DatastructureOperationType.DeleteFromDataType:
                        PersistenceProvider.RemoveFromDataType(dtOperation.Key, dtOperation.DataType);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    opResult.Exception       = ex;
                    opResult.OperationStatus = OperationResult.Status.Failure;
                }
                dtOperationResults.Add(opResult);
            }

            return(dtOperationResults);
        }
        /// <summary>
        /// Write to data source
        /// </summary>
        /// <param name="operation">contians the operation to be written</param>
        /// <returns></returns>
        public OperationResult WriteToDataSource(WriteOperation operation)
        {
            if (operation == null)
            {
                throw new ArgumentNullException(nameof(operation));
            }
            OperationResult operationResults = new OperationResult(operation, OperationResult.Status.Success);

            try
            {
                switch (operation.OperationType)
                {
                case WriteOperationType.Add:
                    var items = new Dictionary <string, ProviderItemBase>();
                    items.Add(operation.Key, operation.ProviderItem);
                    PersistenceProvider.Add(items);
                    break;

                case WriteOperationType.Update:
                    var itemsToUpdate = new Dictionary <string, ProviderItemBase>();
                    itemsToUpdate.Add(operation.Key, operation.ProviderItem);
                    PersistenceProvider.Insert(itemsToUpdate);
                    break;

                case WriteOperationType.Delete:
                    PersistenceProvider.Remove(new string[] { operation.Key });
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex.ToString());
                operationResults = new OperationResult(operation, OperationResult.Status.Failure);
            }
            return(operationResults);
        }