internal void RemoveCreatureColor([NotNull] CreatureColorEntity entity)
 {
     if (entity == null)
     {
         throw new ArgumentNullException(nameof(entity));
     }
     if (entity.IsReadOnly)
     {
         return;
     }
     grangerSimpleDb.CreatureColors.Remove(entity.Id);
     grangerSimpleDb.FlagAsChanged();
     OnCreatureColorsModified?.Invoke(this, new EventArgs());
 }
        /// <summary>
        /// Adds the color if it does not yet exist in the database.
        /// </summary>
        /// <param name="entity"></param>
        internal void SeedCreatureColor([NotNull] CreatureColorEntity entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }
            CreatureColorEntity existingEntity;

            if (!grangerSimpleDb.CreatureColors.TryGetValue(entity.Id, out existingEntity))
            {
                grangerSimpleDb.CreatureColors.Add(entity.Id, entity);
                OnCreatureColorsModified?.Invoke(this, new EventArgs());
            }
        }
        internal void AddOrUpdateCreatureColor([NotNull] CreatureColorEntity entity)
        {
            if (entity == null)
            {
                throw new ArgumentNullException(nameof(entity));
            }
            CreatureColorEntity existingEntity;

            if (!grangerSimpleDb.CreatureColors.TryGetValue(entity.Id, out existingEntity))
            {
                grangerSimpleDb.CreatureColors.Add(entity.Id, entity);
            }
            else
            {
                if (existingEntity.IsReadOnly)
                {
                    throw new InvalidOperationException($"Existing {nameof(CreatureColorEntity)} with Id: {entity.Id} is flagged ReadOnly.");
                }

                grangerSimpleDb.CreatureColors[entity.Id] = entity;
            }
            grangerSimpleDb.FlagAsChanged();
            OnCreatureColorsModified?.Invoke(this, new EventArgs());
        }