Example #1
0
        private InternalRelationshipBuilder SplitNavigationsToSeparateRelationships(InternalRelationshipBuilder relationshipBuilder)
        {
            var foreignKey = relationshipBuilder.Metadata;
            var dependentToPrincipalNavigationName = foreignKey.DependentToPrincipal?.Name;
            var principalToDepedentNavigationName  = foreignKey.PrincipalToDependent?.Name;

            if ((GetInversePropertyAttributeOnNavigation(foreignKey.PrincipalToDependent) != null) ||
                (GetInversePropertyAttributeOnNavigation(foreignKey.DependentToPrincipal) != null))
            {
                // Relationship is joined by InversePropertyAttribute
                throw new InvalidOperationException(CoreStrings.InvalidRelationshipUsingDataAnnotations(
                                                        dependentToPrincipalNavigationName,
                                                        foreignKey.DeclaringEntityType.DisplayName(),
                                                        principalToDepedentNavigationName,
                                                        foreignKey.PrincipalEntityType.DisplayName()));
            }

            relationshipBuilder = relationshipBuilder.PrincipalToDependent((string)null, ConfigurationSource.DataAnnotation);
            if (relationshipBuilder == null)
            {
                return(null);
            }

            if (foreignKey.PrincipalEntityType.Builder.Relationship(
                    foreignKey.DeclaringEntityType.Builder,
                    principalToDepedentNavigationName,
                    null,
                    ConfigurationSource.DataAnnotation) == null)
            {
                return(null);
            }

            return(relationshipBuilder);
        }