public IConceptVolumeModel Create(IConceptVolumeModel model)
 {
     // Validate model
     BusinessWorkflowBase.ValidateIDIsNull(model.Id);
     //BusinessWorkflowBase.ValidateRequiredString(model.Name, nameof(model.Name));
     // Search for an Existing Record (Don't allow Duplicates
     var results = Search(ConceptVolumeMapper.MapToSearchModel(model));
     if (results.Any()) { return results.First(); } // Return the first that matches
     // Map model to a new entity
     var newEntity = ConceptVolumeMapper.MapToEntity(model);
     newEntity.CreatedDate = BusinessWorkflowBase.GenDateTime;
     newEntity.UpdatedDate = null;
     newEntity.Active = true;
     // Add it
     ConceptVolumesRepository.Add(newEntity);
     // Try to Save Changes
     ConceptVolumesRepository.SaveChanges();
     // Return the new value
     return Get(newEntity.Id);
 }
        public virtual IConceptVolumeSearchModel MapToSearchModel(IConceptVolumeModel model)
        {
            var searchModel = EntityMapper.MapToSearchModel <IConceptVolumeModel, ConceptVolumeSearchModel>(model);

            // Search Properties
            searchModel.ConceptId               = model.ConceptId;
            searchModel.ConceptCustomKey        = model.Concept?.CustomKey;
            searchModel.ConceptApiDetailUrl     = model.Concept?.ApiDetailUrl;
            searchModel.ConceptSiteDetailUrl    = model.Concept?.SiteDetailUrl;
            searchModel.ConceptName             = model.Concept?.Name;
            searchModel.ConceptShortDescription = model.Concept?.ShortDescription;
            searchModel.ConceptDescription      = model.Concept?.Description;
            searchModel.VolumeId               = model.VolumeId;
            searchModel.VolumeCustomKey        = model.Volume?.CustomKey;
            searchModel.VolumeApiDetailUrl     = model.Volume?.ApiDetailUrl;
            searchModel.VolumeSiteDetailUrl    = model.Volume?.SiteDetailUrl;
            searchModel.VolumeName             = model.Volume?.Name;
            searchModel.VolumeShortDescription = model.Volume?.ShortDescription;
            searchModel.VolumeDescription      = model.Volume?.Description;
            // Return Search Model
            return(searchModel);
        }
 public IConceptVolumeModel Update(IConceptVolumeModel model)
 {
     // Validate model
     BusinessWorkflowBase.ValidateRequiredNullableID(model.Id);
     //BusinessWorkflowBase.ValidateRequiredString(model.Name, nameof(model.Name));
     // Find existing entity
     // ReSharper disable once PossibleInvalidOperationException
     var existingEntity = ConceptVolumesRepository.Get(model.Id.Value);
     // Check if we would be applying identical information, if we are, just return the original
     // ReSharper disable once SuspiciousTypeConversion.Global
     if (ConceptVolumeMapper.AreEqual(model, existingEntity))
     {
         return ConceptVolumeMapper.MapToModel(existingEntity);
     }
     // Map model to an existing entity
     ConceptVolumeMapper.MapToEntity(model, ref existingEntity);
     existingEntity.UpdatedDate = BusinessWorkflowBase.GenDateTime;
     // Update it
     ConceptVolumesRepository.Update(ConceptVolumeMapper.MapToEntity(model));
     // Try to Save Changes
     ConceptVolumesRepository.SaveChanges();
     // Return the new value
     return Get(existingEntity.Id);
 }