private static bool CanAcceptModelClassAsSource(ModelClass candidate)
        {
            // valid unidirectional associations:
            // EF6 - entity to entity, entity to dependent
            // EFCore - entity to entity, entity to dependent
            // EFCore5Plus - entity to entity, entity to dependent, dependent to dependent, keyless to entity

            ModelRoot modelRoot = candidate.ModelRoot;
            EFVersion entityFrameworkVersion = modelRoot.EntityFrameworkVersion;

            if (entityFrameworkVersion == EFVersion.EF6)
            {
                if (candidate.IsEntity())
                {
                    return(true);
                }
            }
            else if (entityFrameworkVersion == EFVersion.EFCore && !modelRoot.IsEFCore5Plus)
            {
                if (candidate.IsEntity())
                {
                    return(true);
                }
            }
            else if (entityFrameworkVersion == EFVersion.EFCore && modelRoot.IsEFCore5Plus)
            {
                if (candidate.IsEntity())
                {
                    return(true);
                }

                if (candidate.IsDependent())
                {
                    return(true);
                }

                if (candidate.IsKeyless())
                {
                    return(true);
                }
            }

            return(false);
        }
        private static bool CanAcceptModelClassAndModelClassAsSourceAndTarget(ModelClass sourceModelClass, ModelClass targetModelClass)
        {
            // keyless types may not have navigations to owned entities
            if (sourceModelClass.IsKeyless() && targetModelClass.IsDependent())
            {
                return(false);
            }

            // navigation properties can't point to keyless entity types
            if (targetModelClass.IsKeyless())
            {
                return(false);
            }

            // valid unidirectional associations:
            // EF6 - entity to entity, entity to dependent
            // EFCore - entity to entity, entity to dependent
            // EFCore5Plus - entity to entity, entity to dependent, dependent to dependent, keyless to entity

            ModelRoot modelRoot = sourceModelClass.ModelRoot;

            if (modelRoot.EntityFrameworkVersion == EFVersion.EF6)
            {
                if (sourceModelClass.IsEntity() && targetModelClass.IsEntity())
                {
                    return(true);
                }
                if (sourceModelClass.IsEntity() && targetModelClass.IsDependent())
                {
                    return(true);
                }
            }
            else if (modelRoot.EntityFrameworkVersion == EFVersion.EFCore && !modelRoot.IsEFCore5Plus)
            {
                if (sourceModelClass.IsEntity() && targetModelClass.IsEntity())
                {
                    return(true);
                }
                if (sourceModelClass.IsEntity() && targetModelClass.IsDependent())
                {
                    return(true);
                }
            }
            else if (modelRoot.EntityFrameworkVersion == EFVersion.EFCore && modelRoot.IsEFCore5Plus)
            {
                if (sourceModelClass.IsEntity() && targetModelClass.IsEntity())
                {
                    return(true);
                }
                if (sourceModelClass.IsEntity() && targetModelClass.IsDependent())
                {
                    return(true);
                }
                if (sourceModelClass.IsDependent() && targetModelClass.IsDependent())
                {
                    return(true);
                }
                if (sourceModelClass.IsKeyless() && targetModelClass.IsEntity())
                {
                    return(true);
                }
            }

            return(false);
        }