protected TEntity FindReferenced(int key, TEntity entity, bool fallback)
        {
            var referenced = ReferencedGroup.FindEntity(key);

            if (referenced == null)
            {
                if (fallback)
                {
                    var manager = entity.Manager;
                    // TODO: If loaded entity is to be deleted load all components as well
                    referenced = (manager.FindEntity(key) ?? manager.LoadEntity(key)) as TEntity;
                }
                else if (!ReferencedGroup.IsLoading)
                {
                    throw new InvalidOperationException(
                              $"Couldn't find entity '{key}' in '{ReferencedGroup.Name}' referenced from entity '{entity.Id}'"
                              + $" in '{ReferencingGroup.Name}' through '{Name}'");
                }
            }

            return(referenced);
        }
 public bool ContainsEntity(TEntity entity)
 => KeyValueGetter.TryGetKey(entity, new IPropertyValueChange[0], getOldValue: false, out var referencedId) &&
 ReferencedGroup.ContainsEntity(referencedId);