Exemplo n.º 1
0
        /// <summary>
        ///     This is an internal API that supports the Entity Framework Core infrastructure and not subject to
        ///     the same compatibility standards as public APIs. It may be changed or removed without notice in
        ///     any release. You should only use it directly in your code with extreme caution and knowing that
        ///     doing so can result in application failures when updating to a new Entity Framework Core release.
        /// </summary>
        public virtual InternalNavigationBuilder IsRequired(bool?required, ConfigurationSource configurationSource)
        {
            if (configurationSource == ConfigurationSource.Explicit ||
                CanSetIsRequired(required, configurationSource))
            {
                var foreignKey = Metadata.ForeignKey;
                if (foreignKey.IsUnique)
                {
                    if (foreignKey.GetPrincipalEndConfigurationSource() == null)
                    {
                        throw new InvalidOperationException(
                                  CoreStrings.AmbiguousEndRequiredDependentNavigation(
                                      Metadata.DeclaringEntityType.DisplayName(),
                                      Metadata.Name,
                                      foreignKey.Properties.Format()));
                    }

                    return(Metadata.IsOnDependent
                        ? foreignKey.Builder.IsRequired(required, configurationSource)
                           .Metadata.DependentToPrincipal.Builder
                        : foreignKey.Builder.IsRequiredDependent(required, configurationSource)
                           .Metadata.PrincipalToDependent.Builder);
                }
                else
                {
                    if (Metadata.IsOnDependent)
                    {
                        return(foreignKey.Builder.IsRequired(required, configurationSource)
                               .Metadata.DependentToPrincipal.Builder);
                    }
                    else
                    {
                        throw new InvalidOperationException(
                                  CoreStrings.NonUniqueRequiredDependentNavigation(
                                      foreignKey.PrincipalEntityType.DisplayName(), Metadata.Name));
                    }
                }
            }


            return(null);
        }