public virtual void AddNavigationProperties([NotNull] EntityConfiguration entityConfiguration) { Check.NotNull(entityConfiguration, nameof(entityConfiguration)); foreach (var otherEntityType in entityConfiguration.EntityType .Model.EntityTypes.Where(et => et != entityConfiguration.EntityType)) { // set up the navigation properties for foreign keys from another EntityType // which reference this EntityType (i.e. this EntityType is the principal) foreach (var foreignKey in otherEntityType .GetForeignKeys().Where(fk => fk.PrincipalEntityType == entityConfiguration.EntityType)) { if (((EntityType)otherEntityType) .FindAnnotation(RelationalMetadataModelProvider.AnnotationNameEntityTypeError) != null) { entityConfiguration.NavigationPropertyConfigurations.Add( new NavigationPropertyConfiguration( RelationalDesignStrings.UnableToAddNavigationProperty(otherEntityType.Name))); } else { var referencedType = foreignKey.IsUnique ? otherEntityType.Name : "ICollection<" + otherEntityType.Name + ">"; var navPropConfiguration = new NavigationPropertyConfiguration( referencedType, (string)foreignKey[RelationalMetadataModelProvider.AnnotationNamePrincipalEndNavPropName]); if (foreignKey.PrincipalKey.IsPrimaryKey()) { navPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(InversePropertyAttribute), CSharpUtilities.DelimitString( (string)foreignKey[RelationalMetadataModelProvider.AnnotationNameDependentEndNavPropName]))); } entityConfiguration.NavigationPropertyConfigurations.Add( navPropConfiguration); } } } foreach (var foreignKey in entityConfiguration.EntityType.GetForeignKeys()) { // set up the navigation property on this end of foreign keys owned by this EntityType // (i.e. this EntityType is the dependent) var dependentEndNavPropConfiguration = new NavigationPropertyConfiguration( foreignKey.PrincipalEntityType.Name, (string)foreignKey[RelationalMetadataModelProvider.AnnotationNameDependentEndNavPropName]); if (foreignKey.PrincipalKey.IsPrimaryKey()) { dependentEndNavPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(ForeignKeyAttribute), CSharpUtilities.DelimitString( string.Join(",", foreignKey.Properties.Select(p => p.Name))))); dependentEndNavPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(InversePropertyAttribute), CSharpUtilities.DelimitString( (string)foreignKey[RelationalMetadataModelProvider.AnnotationNamePrincipalEndNavPropName]))); } entityConfiguration.NavigationPropertyConfigurations.Add( dependentEndNavPropConfiguration); // set up the other navigation property for self-referencing foreign keys owned by this EntityType if (((ForeignKey)foreignKey).IsSelfReferencing()) { var referencedType = foreignKey.IsUnique ? foreignKey.DeclaringEntityType.Name : "ICollection<" + foreignKey.DeclaringEntityType.Name + ">"; var principalEndNavPropConfiguration = new NavigationPropertyConfiguration( referencedType, (string)foreignKey[RelationalMetadataModelProvider.AnnotationNamePrincipalEndNavPropName]); principalEndNavPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(InversePropertyAttribute), CSharpUtilities.DelimitString( (string)foreignKey[RelationalMetadataModelProvider.AnnotationNameDependentEndNavPropName]))); entityConfiguration.NavigationPropertyConfigurations.Add( principalEndNavPropConfiguration); } } }
public virtual void AddNavigationPropertyConfiguration( [NotNull] NavigationPropertyConfiguration navigationPropertyConfiguration) { }
public virtual void AddNavigationProperties([NotNull] EntityConfiguration entityConfiguration) { Check.NotNull(entityConfiguration, nameof(entityConfiguration)); foreach (var otherEntityType in entityConfiguration.EntityType .Model.EntityTypes.Where(et => et != entityConfiguration.EntityType)) { // set up the navigation properties for foreign keys from another EntityType // which reference this EntityType (i.e. this EntityType is the principal) foreach (var foreignKey in otherEntityType .GetForeignKeys().Where(fk => fk.PrincipalEntityType == entityConfiguration.EntityType)) { if (((EntityType)otherEntityType) .FindAnnotation(RelationalMetadataModelProvider.AnnotationNameEntityTypeError) != null) { entityConfiguration.NavigationPropertyConfigurations.Add( new NavigationPropertyConfiguration( RelationalDesignStrings.UnableToAddNavigationProperty(otherEntityType.Name))); } else { var referencedType = foreignKey.IsUnique ? otherEntityType.Name : "ICollection<" + otherEntityType.Name + ">"; var navPropConfiguration = new NavigationPropertyConfiguration( referencedType, (string)foreignKey[RelationalMetadataModelProvider.AnnotationNamePrincipalEndNavPropName]); if (foreignKey.PrincipalKey.IsPrimaryKey()) { navPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(InversePropertyAttribute), CSharpUtilities.DelimitString( (string)foreignKey[RelationalMetadataModelProvider.AnnotationNameDependentEndNavPropName]))); } entityConfiguration.NavigationPropertyConfigurations.Add( navPropConfiguration); } } } foreach (var foreignKey in entityConfiguration.EntityType.GetForeignKeys()) { // set up the navigation property on this end of foreign keys owned by this EntityType // (i.e. this EntityType is the dependent) var dependentEndNavPropConfiguration = new NavigationPropertyConfiguration( foreignKey.PrincipalEntityType.Name, (string)foreignKey[RelationalMetadataModelProvider.AnnotationNameDependentEndNavPropName]); if(foreignKey.PrincipalKey.IsPrimaryKey()) { dependentEndNavPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(ForeignKeyAttribute), CSharpUtilities.DelimitString( string.Join(",", foreignKey.Properties.Select(p => p.Name))))); dependentEndNavPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(InversePropertyAttribute), CSharpUtilities.DelimitString( (string)foreignKey[RelationalMetadataModelProvider.AnnotationNamePrincipalEndNavPropName]))); } entityConfiguration.NavigationPropertyConfigurations.Add( dependentEndNavPropConfiguration); // set up the other navigation property for self-referencing foreign keys owned by this EntityType if (((ForeignKey)foreignKey).IsSelfReferencing()) { var referencedType = foreignKey.IsUnique ? foreignKey.DeclaringEntityType.Name : "ICollection<" + foreignKey.DeclaringEntityType.Name + ">"; var principalEndNavPropConfiguration = new NavigationPropertyConfiguration( referencedType, (string)foreignKey[RelationalMetadataModelProvider.AnnotationNamePrincipalEndNavPropName]); principalEndNavPropConfiguration.AttributeConfigurations.Add( new AttributeConfiguration( nameof(InversePropertyAttribute), CSharpUtilities.DelimitString( (string)foreignKey[RelationalMetadataModelProvider.AnnotationNameDependentEndNavPropName]))); entityConfiguration.NavigationPropertyConfigurations.Add( principalEndNavPropConfiguration); } } }