private async Task MakeSureAFeatureBitWithThatNameDoesNotExist(FeatureBitEfDefinition definition)
        {
            var existenceCheck = await DbContext.FeatureBitDefinitions.FirstOrDefaultAsync(fb => fb.Name == definition.Name);

            if (existenceCheck != null)
            {
                throw new DataException($"Cannot add. Feature bit with name '{definition.Name}' already exists.");
            }
        }
        private static void ValidateDefinition(FeatureBitEfDefinition definition)
        {
            var validationResults = new List <ValidationResult>();

            Validator.TryValidateObject(definition, new ValidationContext(definition), validationResults, true);

            if (validationResults.Count > 0)
            {
                var errorStringBuilder = new StringBuilder();
                validationResults.ForEach(e => errorStringBuilder.Append(e.ErrorMessage + Environment.NewLine));
                throw new InvalidDataException(errorStringBuilder.ToString());
            }
        }
        public async Task <IFeatureBitDefinition> AddAsync(IFeatureBitDefinition definition)
        {
            FeatureBitEfDefinition newEntity = definition.ToEfDefinition();

            ValidateDefinition(newEntity);

            await MakeSureAFeatureBitWithThatNameDoesNotExist(newEntity);

            var entity = await DbContext.FeatureBitDefinitions.AddAsync(newEntity);

            await DbContext.SaveChangesAsync();

            return(entity.Entity);
        }