public IActionResult Put(Guid id, [FromBody] DataChannelDescriptor value)
        {
            if (ModelState.IsValid == false)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var originalDataChannelDescriptor = (DataChannelDescriptor)_dbContext.DataChannelDescriptors
                                                    .Include(dcd => dcd.DataSourceManifest.DataSourceManifestId)
                                                    .Include(dcd => dcd.DataConsumerManifest.DataConsumerManifestId)
                                                    .FirstOrDefault(o => o.DataChannelDescriptorId == id);

                DataSourceManifest dataSourceManifest = (from dsm in _dbContext.DataSourceManifests
                                                         where dsm.DataSourceManifestId == value.DataSourceManifest.DataSourceManifestId
                                                         select dsm).FirstOrDefault();

                DataConsumerManifest dataConsumerManifest = (from dcm in _dbContext.DataConsumerManifests
                                                             where dcm.DataConsumerManifestId == value.DataConsumerManifest.DataConsumerManifestId
                                                             select dcm).SingleOrDefault();

                if (dataSourceManifest != null)
                {
                    originalDataChannelDescriptor.DataSourceManifest = dataSourceManifest;
                }

                if (dataConsumerManifest != null)
                {
                    originalDataChannelDescriptor.DataConsumerManifest = dataConsumerManifest;
                }

                _dbContext.Entry(originalDataChannelDescriptor).CurrentValues.SetValues(value);
                _dbContext.SaveChanges();
                return(Ok(_dbContext.Entry(originalDataChannelDescriptor).GetDatabaseValues()));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.StackTrace);
                return(BadRequest());
            }
        }
        public IActionResult Post([FromBody] DataConsumerManifest value)
        {
            if (ModelState.IsValid == false)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                if (value.DataSourceDefinitions != null)
                {
                    //get from the database datasourcedefinitions
                    List <DataSourceDefinition> dataSourceDefinitions = new List <DataSourceDefinition>();

                    foreach (DataSourceDefinition requestDataSourceDefinition in value.DataSourceDefinitions)
                    {
                        DataSourceDefinition dataSourceDefinition =
                            _dbContext.DataSourceDefinitions.Find(requestDataSourceDefinition.DataSourceDefinitionId);

                        if (dataSourceDefinition != null)
                        {
                            dataSourceDefinitions.Add(dataSourceDefinition);
                        }
                    }

                    value.DataSourceDefinitions = dataSourceDefinitions;
                }

                _dbContext.DataConsumerManifests.Add(value);
                _dbContext.SaveChanges();

                return(Created("registry-repo/DataConsumerManifest", _dbContext.Entry(value).GetDatabaseValues()));
            }
            catch (Exception e)
            {
                _logger.LogError(e.StackTrace);
                return(BadRequest());
            }
        }
        public IActionResult Put(Guid id, [FromBody] DataConsumerManifest value)
        {
            if (ModelState.IsValid == false)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                var originalDataConsumerManifest = (DataConsumerManifest)_dbContext.DataConsumerManifests
                                                   .Include(dsm => dsm.DataSourceDefinitions)
                                                   .FirstOrDefault(o => o.DataConsumerManifestId == id);
                //remove all child elements
                //_dbContext.Remove(originalDataSourceManifest.DataSourceDefinitionParameters);
                //_dbContext.Remove(originalDataSourceManifest.DataSourceDefinition);

                //originalDataSourceManifest.DataConDefinitionParameters.Parameters = value.DataSourceDefinitionParameters.Parameters;

                ////find if the DataSourceDefinition has changed
                //var dsdorig = _dbContext.DataSourceDefinitions.Find(value.DataSourceManifestId);

                //if (dsdorig != null)
                //{
                //    _dbContext.Remove(originalDataSourceManifest.DataSourceDefinition);
                //    originalDataSourceManifest.DataSourceDefinition = dsdorig;
                //}

                ////originalDataSourceManifest.DataSourceDefinition = value.DataSourceDefinition;

                if (originalDataConsumerManifest.DataSourceDefinitions.All(value.DataSourceDefinitions.Contains) &&
                    originalDataConsumerManifest.DataSourceDefinitions.Count == value.DataSourceDefinitions.Count)
                {
                    //no need to do anything
                }
                else
                {
                    //use values form value
                    //get from the database datasourcedefinitions
                    List <DataSourceDefinition> dataSourceDefinitions = new List <DataSourceDefinition>();

                    foreach (DataSourceDefinition requestDataSourceDefinition in value.DataSourceDefinitions)
                    {
                        DataSourceDefinition dataSourceDefinition =
                            _dbContext.DataSourceDefinitions.Find(requestDataSourceDefinition.DataSourceDefinitionId);

                        if (dataSourceDefinition != null)
                        {
                            dataSourceDefinitions.Add(dataSourceDefinition);
                        }
                    }

                    value.DataSourceDefinitions = dataSourceDefinitions;
                }

                _dbContext.Entry(originalDataConsumerManifest).CurrentValues.SetValues(value);
                _dbContext.SaveChanges();
                return(Ok(value));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.StackTrace);
                return(BadRequest());
            }
        }