diff --git a/src/EFCore/Metadata/Builders/CollectionNavigationBuilder.cs b/src/EFCore/Metadata/Builders/CollectionNavigationBuilder.cs index 1340e4b6317..f68ddde135a 100644 --- a/src/EFCore/Metadata/Builders/CollectionNavigationBuilder.cs +++ b/src/EFCore/Metadata/Builders/CollectionNavigationBuilder.cs @@ -121,19 +121,13 @@ public CollectionNavigationBuilder( /// The name of the reference navigation property on the other end of this relationship. /// If null or not specified, then there is no navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. - public virtual ReferenceCollectionBuilder WithOne( - [CanBeNull] string navigationName = null, - [CanBeNull] Action navigationConfiguration = null) + public virtual ReferenceCollectionBuilder WithOne([CanBeNull] string navigationName = null) => new ReferenceCollectionBuilder( DeclaringEntityType, RelatedEntityType, WithOneBuilder( - Check.NullButNotEmpty(navigationName, nameof(navigationName)), - navigationConfiguration).Metadata); + Check.NullButNotEmpty(navigationName, nameof(navigationName))).Metadata); /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -142,10 +136,8 @@ public virtual ReferenceCollectionBuilder WithOne( /// doing so can result in application failures when updating to a new Entity Framework Core release. /// [EntityFrameworkInternal] - protected virtual InternalRelationshipBuilder WithOneBuilder( - [CanBeNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) - => WithOneBuilder(MemberIdentity.Create(navigationName), navigationConfiguration); + protected virtual InternalRelationshipBuilder WithOneBuilder([CanBeNull] string navigationName) + => WithOneBuilder(MemberIdentity.Create(navigationName)); /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -155,13 +147,10 @@ protected virtual InternalRelationshipBuilder WithOneBuilder( /// [EntityFrameworkInternal] protected virtual InternalRelationshipBuilder WithOneBuilder( - [CanBeNull] MemberInfo navigationMemberInfo, - [CanBeNull] Action navigationConfiguration = null) - => WithOneBuilder(MemberIdentity.Create(navigationMemberInfo), navigationConfiguration); + [CanBeNull] MemberInfo navigationMemberInfo) + => WithOneBuilder(MemberIdentity.Create(navigationMemberInfo)); - private InternalRelationshipBuilder WithOneBuilder( - MemberIdentity reference, - Action navigationConfiguration = null) + private InternalRelationshipBuilder WithOneBuilder(MemberIdentity reference) { if (SkipNavigation != null) { @@ -187,7 +176,7 @@ private InternalRelationshipBuilder WithOneBuilder( InternalRelationshipBuilder.ThrowForConflictingNavigation(foreignKey, referenceName, newToPrincipal: true); } - var withOneBuilder = reference.MemberInfo == null || CollectionMember == null + return reference.MemberInfo == null || CollectionMember == null ? Builder.HasNavigations( reference.Name, CollectionName, (EntityType)DeclaringEntityType, (EntityType)RelatedEntityType, @@ -196,15 +185,6 @@ private InternalRelationshipBuilder WithOneBuilder( reference.MemberInfo, CollectionMember, (EntityType)DeclaringEntityType, (EntityType)RelatedEntityType, ConfigurationSource.Explicit); - - if (navigationConfiguration != null - && withOneBuilder.Metadata.DependentToPrincipal != null) - { - navigationConfiguration( - new NavigationBuilder(withOneBuilder.Metadata.DependentToPrincipal)); - } - - return withOneBuilder; } /// diff --git a/src/EFCore/Metadata/Builders/CollectionNavigationBuilder`.cs b/src/EFCore/Metadata/Builders/CollectionNavigationBuilder`.cs index 2b64ca7cfc8..815f4fe6b78 100644 --- a/src/EFCore/Metadata/Builders/CollectionNavigationBuilder`.cs +++ b/src/EFCore/Metadata/Builders/CollectionNavigationBuilder`.cs @@ -50,20 +50,15 @@ public CollectionNavigationBuilder( /// The name of the reference navigation property on the other end of this relationship. /// If null, there is no navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. public new virtual ReferenceCollectionBuilder WithOne( - [CanBeNull] string navigationName = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName = null) { return new ReferenceCollectionBuilder( DeclaringEntityType, RelatedEntityType, WithOneBuilder( - Check.NullButNotEmpty(navigationName, nameof(navigationName)), - navigationConfiguration).Metadata); + Check.NullButNotEmpty(navigationName, nameof(navigationName))).Metadata); } /// @@ -81,19 +76,13 @@ public CollectionNavigationBuilder( /// relationship (post => post.Blog). If no property is specified, the relationship will be /// configured without a navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. public virtual ReferenceCollectionBuilder WithOne( - [CanBeNull] Expression> navigationExpression, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] Expression> navigationExpression) => new ReferenceCollectionBuilder( DeclaringEntityType, RelatedEntityType, - WithOneBuilder( - navigationExpression?.GetPropertyAccess(), - navigationConfiguration).Metadata); + WithOneBuilder(navigationExpression?.GetPropertyAccess()).Metadata); /// /// Configures this as a many-to-many relationship. diff --git a/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs b/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs index bae8c850907..b19ad2ebaf0 100644 --- a/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs +++ b/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs @@ -588,21 +588,17 @@ private OwnedNavigationBuilder OwnsManyBuilder(in TypeIdentity ownedType, string /// no property is specified, the relationship will be configured without a navigation property on this /// end. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual ReferenceNavigationBuilder HasOne( [NotNull] string relatedTypeName, - [CanBeNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName) { Check.NotEmpty(relatedTypeName, nameof(relatedTypeName)); Check.NullButNotEmpty(navigationName, nameof(navigationName)); var relatedEntityType = FindRelatedEntityType(relatedTypeName, navigationName); var foreignKey = HasOneBuilder( - MemberIdentity.Create(navigationName), relatedEntityType, navigationConfiguration); + MemberIdentity.Create(navigationName), relatedEntityType); return new ReferenceNavigationBuilder( Builder.Metadata, @@ -635,21 +631,17 @@ public virtual ReferenceNavigationBuilder HasOne( /// no property is specified, the relationship will be configured without a navigation property on this /// end. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual ReferenceNavigationBuilder HasOne( [NotNull] Type relatedType, - [CanBeNull] string navigationName = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName = null) { Check.NotNull(relatedType, nameof(relatedType)); Check.NullButNotEmpty(navigationName, nameof(navigationName)); var relatedEntityType = FindRelatedEntityType(relatedType, navigationName); var foreignKey = HasOneBuilder( - MemberIdentity.Create(navigationName), relatedEntityType, navigationConfiguration); + MemberIdentity.Create(navigationName), relatedEntityType); return new ReferenceNavigationBuilder( Builder.Metadata, @@ -675,19 +667,14 @@ public virtual ReferenceNavigationBuilder HasOne( /// The name of the reference navigation property on this entity type that represents /// the relationship. The navigation must be a CLR property on the entity type. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. - public virtual ReferenceNavigationBuilder HasOne( - [NotNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) + public virtual ReferenceNavigationBuilder HasOne([NotNull] string navigationName) { Check.NotEmpty(navigationName, nameof(navigationName)); return Metadata.ClrType == null - ? HasOne(navigationName, null, navigationConfiguration) // Path only used by pre 3.0 snapshots - : HasOne(Metadata.GetNavigationMemberInfo(navigationName).GetMemberType(), navigationName, navigationConfiguration); + ? HasOne(navigationName, null) // Path only used by pre 3.0 snapshots + : HasOne(Metadata.GetNavigationMemberInfo(navigationName).GetMemberType(), navigationName); } /// @@ -699,8 +686,7 @@ public virtual ReferenceNavigationBuilder HasOne( [EntityFrameworkInternal] protected virtual ForeignKey HasOneBuilder( MemberIdentity navigationId, - [NotNull] EntityType relatedEntityType, - [CanBeNull] Action navigationConfiguration = null) + [NotNull] EntityType relatedEntityType) { ForeignKey foreignKey; if (navigationId.MemberInfo != null) @@ -716,19 +702,6 @@ protected virtual ForeignKey HasOneBuilder( targetIsPrincipal: Builder.Metadata == relatedEntityType ? true : (bool?)null).Metadata; } - if (navigationConfiguration != null - && navigationId.Name != null) - { - var navigation = - Builder.Metadata == relatedEntityType - || foreignKey.PrincipalEntityType == relatedEntityType - ? foreignKey.DependentToPrincipal - : foreignKey.PrincipalToDependent; - - navigationConfiguration( - new NavigationBuilder(navigation)); - } - return foreignKey; } @@ -750,21 +723,16 @@ protected virtual ForeignKey HasOneBuilder( /// no property is specified, the relationship will be configured without a navigation property on this /// end. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual CollectionNavigationBuilder HasMany( [NotNull] string relatedTypeName, - [CanBeNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName) { Check.NotEmpty(relatedTypeName, nameof(relatedTypeName)); Check.NullButNotEmpty(navigationName, nameof(navigationName)); return HasMany(navigationName, - FindRelatedEntityType(relatedTypeName, navigationName), - navigationConfiguration); + FindRelatedEntityType(relatedTypeName, navigationName)); } /// @@ -783,19 +751,14 @@ public virtual CollectionNavigationBuilder HasMany( /// The name of the collection navigation property on this entity type that represents the relationship. /// The navigation must be a CLR property on the entity type. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. - public virtual CollectionNavigationBuilder HasMany( - [NotNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) + public virtual CollectionNavigationBuilder HasMany([NotNull] string navigationName) { Check.NotEmpty(navigationName, nameof(navigationName)); if (Metadata.ClrType == null) { - return HasMany(navigationName, (string)null, navigationConfiguration); + return HasMany(navigationName, (string)null); } var memberType = Metadata.GetNavigationMemberInfo(navigationName).GetMemberType(); @@ -811,7 +774,7 @@ public virtual CollectionNavigationBuilder HasMany( "T")); } - return HasMany(elementType, navigationName, navigationConfiguration); + return HasMany(elementType, navigationName); } /// @@ -837,27 +800,21 @@ public virtual CollectionNavigationBuilder HasMany( /// no property is specified, the relationship will be configured without a navigation property on this /// end. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual CollectionNavigationBuilder HasMany( [NotNull] Type relatedType, - [CanBeNull] string navigationName = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName = null) { Check.NotNull(relatedType, nameof(relatedType)); Check.NullButNotEmpty(navigationName, nameof(navigationName)); return HasMany(navigationName, - FindRelatedEntityType(relatedType, navigationName), - navigationConfiguration); + FindRelatedEntityType(relatedType, navigationName)); } private CollectionNavigationBuilder HasMany( string navigationName, - EntityType relatedEntityType, - Action navigationConfiguration = null) + EntityType relatedEntityType) { var skipNavigation = navigationName != null ? Builder.Metadata.FindSkipNavigation(navigationName) : null; @@ -869,19 +826,11 @@ private CollectionNavigationBuilder HasMany( .IsUnique(false, ConfigurationSource.Explicit); } - var foreignKey = relationship?.Metadata; - if (navigationConfiguration != null - && foreignKey?.PrincipalToDependent != null) - { - navigationConfiguration( - new NavigationBuilder(foreignKey.PrincipalToDependent)); - } - return new CollectionNavigationBuilder( Builder.Metadata, relatedEntityType, new MemberIdentity(navigationName), - foreignKey, + relationship?.Metadata, skipNavigation); } diff --git a/src/EFCore/Metadata/Builders/EntityTypeBuilder`.cs b/src/EFCore/Metadata/Builders/EntityTypeBuilder`.cs index 38bd0b0085c..4573724e94b 100644 --- a/src/EFCore/Metadata/Builders/EntityTypeBuilder`.cs +++ b/src/EFCore/Metadata/Builders/EntityTypeBuilder`.cs @@ -516,9 +516,9 @@ private OwnedNavigationBuilder OwnsManyBuilder /// /// After calling this method, you should chain a call to - /// + /// /// or - /// + /// /// to fully configure the relationship. Calling just this method without the chained call will not /// produce a valid relationship. /// @@ -529,18 +529,14 @@ private OwnedNavigationBuilder OwnsManyBuilder - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual ReferenceNavigationBuilder HasOne( - [CanBeNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName) where TRelatedEntity : class { var relatedEntityType = FindRelatedEntityType(typeof(TRelatedEntity), navigationName); var foreignKey = HasOneBuilder( - MemberIdentity.Create(navigationName), relatedEntityType, navigationConfiguration); + MemberIdentity.Create(navigationName), relatedEntityType); return new ReferenceNavigationBuilder( Builder.Metadata, @@ -562,10 +558,10 @@ public virtual ReferenceNavigationBuilder HasOne /// After calling this method, you should chain a call to /// + /// cref="ReferenceNavigationBuilder{TEntity,TRelatedEntity}.WithMany(Expression{Func{TRelatedEntity,IEnumerable{TEntity}}})" /> /// or /// + /// cref="ReferenceNavigationBuilder{TEntity,TRelatedEntity}.WithOne(Expression{Func{TRelatedEntity,TEntity}})" /> /// to fully configure the relationship. Calling just this method without the chained call will not /// produce a valid relationship. /// @@ -576,19 +572,15 @@ public virtual ReferenceNavigationBuilder HasOnepost => post.Blog). If no property is specified, the relationship will be /// configured without a navigation property on this end. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual ReferenceNavigationBuilder HasOne( - [CanBeNull] Expression> navigationExpression = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] Expression> navigationExpression = null) where TRelatedEntity : class { var navigationMember = navigationExpression?.GetPropertyAccess(); var relatedEntityType = FindRelatedEntityType(typeof(TRelatedEntity), navigationMember?.GetSimpleMemberName()); var foreignKey = HasOneBuilder( - MemberIdentity.Create(navigationMember), relatedEntityType, navigationConfiguration); + MemberIdentity.Create(navigationMember), relatedEntityType); return new ReferenceNavigationBuilder( Builder.Metadata, @@ -610,7 +602,7 @@ public virtual ReferenceNavigationBuilder HasOne /// After calling this method, you should chain a call to /// + /// cref="CollectionNavigationBuilder{TEntity,TRelatedEntity}.WithOne(Expression{Func{TRelatedEntity,TEntity}})" /> /// to fully configure the relationship. Calling just this method without the chained call will not /// produce a valid relationship. /// @@ -621,13 +613,9 @@ public virtual ReferenceNavigationBuilder HasOne - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual CollectionNavigationBuilder HasMany( - [CanBeNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName) where TRelatedEntity : class { Check.NullButNotEmpty(navigationName, nameof(navigationName)); @@ -643,14 +631,6 @@ public virtual CollectionNavigationBuilder HasMany( Builder.Metadata, relatedEntityType, @@ -672,7 +652,7 @@ public virtual CollectionNavigationBuilder HasMany /// After calling this method, you should chain a call to /// + /// cref="CollectionNavigationBuilder{TEntity,TRelatedEntity}.WithOne(Expression{Func{TRelatedEntity,TEntity}})" /> /// to fully configure the relationship. Calling just this method without the chained call will not /// produce a valid relationship. /// @@ -683,13 +663,9 @@ public virtual CollectionNavigationBuilder HasManyblog => blog.Posts). If no property is specified, the relationship will be /// configured without a navigation property on this end. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. public virtual CollectionNavigationBuilder HasMany( - [CanBeNull] Expression>> navigationExpression = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] Expression>> navigationExpression = null) where TRelatedEntity : class { var navigationMember = navigationExpression?.GetPropertyAccess(); @@ -704,19 +680,11 @@ public virtual CollectionNavigationBuilder HasMany( Builder.Metadata, relatedEntityType, new MemberIdentity(navigationMember), - foreignKey, + relationship?.Metadata, skipNavigation); } diff --git a/src/EFCore/Metadata/Builders/OwnedNavigationBuilder`.cs b/src/EFCore/Metadata/Builders/OwnedNavigationBuilder`.cs index edf2f5d20dd..34d8fd57a1f 100644 --- a/src/EFCore/Metadata/Builders/OwnedNavigationBuilder`.cs +++ b/src/EFCore/Metadata/Builders/OwnedNavigationBuilder`.cs @@ -525,9 +525,9 @@ private OwnedNavigationBuilder OwnsManyBuil /// /// /// After calling this method, you should chain a call to - /// + /// /// or - /// + /// /// to fully configure the relationship. Calling just this method without the chained call will not /// produce a valid relationship. /// @@ -567,10 +567,10 @@ public virtual ReferenceNavigationBuilder H /// /// After calling this method, you should chain a call to /// + /// .WithMany(Expression{Func{TRelatedEntity,IEnumerable{TEntity}}})" /> /// or /// + /// .WithOne(Expression{Func{TRelatedEntity,TEntity}})" /> /// to fully configure the relationship. Calling just this method without the chained call will not /// produce a valid relationship. /// diff --git a/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder.cs b/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder.cs index 9ec91328c30..7d6bfc4cd92 100644 --- a/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder.cs +++ b/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder.cs @@ -135,27 +135,13 @@ public ReferenceNavigationBuilder( /// The name of the collection navigation property on the other end of this relationship. /// If null or not specified, there is no navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. - public virtual ReferenceCollectionBuilder WithMany( - [CanBeNull] string collection = null, - [CanBeNull] Action navigationConfiguration = null) + public virtual ReferenceCollectionBuilder WithMany([CanBeNull] string collection = null) { - var foreignKey = WithManyBuilder(Check.NullButNotEmpty(collection, nameof(collection))).Metadata; - - if (navigationConfiguration != null - && foreignKey.PrincipalToDependent != null) - { - navigationConfiguration( - new NavigationBuilder(foreignKey.PrincipalToDependent)); - } - return new ReferenceCollectionBuilder( RelatedEntityType, DeclaringEntityType, - foreignKey); + WithManyBuilder(Check.NullButNotEmpty(collection, nameof(collection))).Metadata); } /// @@ -224,20 +210,12 @@ private InternalRelationshipBuilder WithManyBuilder(MemberIdentity collection) /// The name of the reference navigation property on the other end of this relationship. /// If null or not specified, there is no navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object that can be used to configure the relationship. - /// An object to further configure the relationship. - public virtual ReferenceReferenceBuilder WithOne( - [CanBeNull] string reference = null, - [CanBeNull] Action navigationConfiguration = null) + public virtual ReferenceReferenceBuilder WithOne([CanBeNull] string reference = null) => new ReferenceReferenceBuilder( DeclaringEntityType, RelatedEntityType, - WithOneBuilder( - Check.NullButNotEmpty(reference, nameof(reference)), - navigationConfiguration).Metadata); + WithOneBuilder(Check.NullButNotEmpty(reference, nameof(reference))).Metadata); /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -246,10 +224,8 @@ public virtual ReferenceReferenceBuilder WithOne( /// doing so can result in application failures when updating to a new Entity Framework Core release. /// [EntityFrameworkInternal] - protected virtual InternalRelationshipBuilder WithOneBuilder( - [CanBeNull] string navigationName, - [CanBeNull] Action navigationConfiguration = null) - => WithOneBuilder(MemberIdentity.Create(navigationName), navigationConfiguration); + protected virtual InternalRelationshipBuilder WithOneBuilder([CanBeNull] string navigationName) + => WithOneBuilder(MemberIdentity.Create(navigationName)); /// /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to @@ -259,13 +235,10 @@ protected virtual InternalRelationshipBuilder WithOneBuilder( /// [EntityFrameworkInternal] protected virtual InternalRelationshipBuilder WithOneBuilder( - [CanBeNull] MemberInfo navigationMemberInfo, - [CanBeNull] Action navigationConfiguration = null) - => WithOneBuilder(MemberIdentity.Create(navigationMemberInfo), navigationConfiguration); + [CanBeNull] MemberInfo navigationMemberInfo) + => WithOneBuilder(MemberIdentity.Create(navigationMemberInfo)); - private InternalRelationshipBuilder WithOneBuilder( - MemberIdentity reference, - Action navigationConfiguration = null) + private InternalRelationshipBuilder WithOneBuilder(MemberIdentity reference) { var referenceName = reference.Name; if (!Builder.Metadata.IsUnique @@ -331,23 +304,7 @@ private InternalRelationshipBuilder WithOneBuilder( (EntityType)RelatedEntityType, (EntityType)DeclaringEntityType, ConfigurationSource.Explicit); } - var withOneBuilder = batch.Run(builder); - - if (navigationConfiguration != null) - { - if (pointsToPrincipal) - { - navigationConfiguration( - new NavigationBuilder(withOneBuilder.Metadata.DependentToPrincipal)); - } - else - { - navigationConfiguration( - new NavigationBuilder(withOneBuilder.Metadata.PrincipalToDependent)); - } - } - - return withOneBuilder; + return batch.Run(builder); } #region Hidden System.Object members diff --git a/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder`.cs b/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder`.cs index 50c2286de09..24a6f9fb1ea 100644 --- a/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder`.cs +++ b/src/EFCore/Metadata/Builders/ReferenceNavigationBuilder`.cs @@ -73,27 +73,15 @@ public ReferenceNavigationBuilder( /// The name of the collection navigation property on the other end of this relationship. /// If null or not specified, there is no navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. public new virtual ReferenceCollectionBuilder WithMany( - [CanBeNull] string navigationName = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName = null) { - var foreignKey = WithManyBuilder( - Check.NullButNotEmpty(navigationName, nameof(navigationName))).Metadata; - if (navigationConfiguration != null - && foreignKey.PrincipalToDependent != null) - { - navigationConfiguration( - new NavigationBuilder(foreignKey.PrincipalToDependent)); - } - return new ReferenceCollectionBuilder( RelatedEntityType, DeclaringEntityType, - foreignKey); + WithManyBuilder( + Check.NullButNotEmpty(navigationName, nameof(navigationName))).Metadata); } /// @@ -111,27 +99,14 @@ public ReferenceNavigationBuilder( /// relationship (blog => blog.Posts). If no property is specified, the relationship will be /// configured without a navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. public virtual ReferenceCollectionBuilder WithMany( - [CanBeNull] Expression>> navigationExpression, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] Expression>> navigationExpression) { - var navigationMember = navigationExpression?.GetPropertyAccess(); - var foreignKey = WithManyBuilder(navigationMember).Metadata; - if (navigationConfiguration != null - && foreignKey.PrincipalToDependent != null) - { - navigationConfiguration( - new NavigationBuilder(foreignKey.PrincipalToDependent)); - } - return new ReferenceCollectionBuilder( RelatedEntityType, DeclaringEntityType, - foreignKey); + WithManyBuilder(navigationExpression?.GetPropertyAccess()).Metadata); } /// @@ -148,19 +123,14 @@ public virtual ReferenceCollectionBuilder WithMany( /// The name of the reference navigation property on the other end of this relationship. /// If null or not specified, there is no navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. public new virtual ReferenceReferenceBuilder WithOne( - [CanBeNull] string navigationName = null, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] string navigationName = null) => new ReferenceReferenceBuilder( DeclaringEntityType, RelatedEntityType, WithOneBuilder( - Check.NullButNotEmpty(navigationName, nameof(navigationName)), - navigationConfiguration).Metadata); + Check.NullButNotEmpty(navigationName, nameof(navigationName))).Metadata); /// /// @@ -177,17 +147,12 @@ public virtual ReferenceCollectionBuilder WithMany( /// relationship (blog => blog.BlogInfo). If no property is specified, the relationship will be /// configured without a navigation property on the other end of the relationship. /// - /// - /// An optional action which further configures the navigation property. - /// /// An object to further configure the relationship. public virtual ReferenceReferenceBuilder WithOne( - [CanBeNull] Expression> navigationExpression, - [CanBeNull] Action navigationConfiguration = null) + [CanBeNull] Expression> navigationExpression) => new ReferenceReferenceBuilder( DeclaringEntityType, RelatedEntityType, - WithOneBuilder(navigationExpression?.GetPropertyAccess(), - navigationConfiguration).Metadata); + WithOneBuilder(navigationExpression?.GetPropertyAccess()).Metadata); } } diff --git a/test/EFCore.Specification.Tests/FieldMappingTestBase.cs b/test/EFCore.Specification.Tests/FieldMappingTestBase.cs index 382e890d2d5..eb111d60ad0 100644 --- a/test/EFCore.Specification.Tests/FieldMappingTestBase.cs +++ b/test/EFCore.Specification.Tests/FieldMappingTestBase.cs @@ -1989,12 +1989,14 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity().UsePropertyAccessMode(PropertyAccessMode.Field); modelBuilder.Entity() - .HasOne( - e => e.Dependent, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne( - e => e.OneToOneFieldNavPrincipal) + .HasOne(e => e.Dependent) + .WithOne(e => e.OneToOneFieldNavPrincipal) .HasForeignKey(); + + modelBuilder.Entity() + .Navigation(e => e.Dependent) + .UsePropertyAccessMode(PropertyAccessMode.Field); + modelBuilder.Entity(); if (modelBuilder.Model.GetPropertyAccessMode() != PropertyAccessMode.Property) diff --git a/test/EFCore.Tests/ModelBuilding/ManyToOneTestBase.cs b/test/EFCore.Tests/ModelBuilding/ManyToOneTestBase.cs index f43f5b517f8..1b4b5d48d8e 100644 --- a/test/EFCore.Tests/ModelBuilding/ManyToOneTestBase.cs +++ b/test/EFCore.Tests/ModelBuilding/ManyToOneTestBase.cs @@ -2061,48 +2061,6 @@ public virtual void One_to_many_relationship_has_no_ambiguity_explicit() .Name); } - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_HasMany_WithOne() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasMany( - e => e.Dependents, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne( - e => e.OneToManyPrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToManyNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependents").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToManyPrincipal").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_named_HasMany_WithOne() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasMany( - "Dependents", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne( - "OneToManyPrincipal", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToManyNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependents").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToManyPrincipal").GetPropertyAccessMode()); - } - [ConditionalFact] public virtual void Navigation_properties_can_set_access_mode_using_expressions() { @@ -2163,16 +2121,21 @@ public virtual void Access_mode_can_be_overridden_at_entity_and_navigation_prope var principal = modelBuilder.Entity(); principal.UsePropertyAccessMode(PropertyAccessMode.PreferProperty); + var dependent = modelBuilder.Entity(); dependent.UsePropertyAccessMode(PropertyAccessMode.Field); modelBuilder.Entity() - .HasMany( - e => e.Dependents, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne( - e => e.OneToManyPrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)); + .HasMany(e => e.Dependents) + .WithOne(e => e.OneToManyPrincipal); + + modelBuilder.Entity() + .Navigation(e => e.Dependents) + .UsePropertyAccessMode(PropertyAccessMode.Field); + + modelBuilder.Entity() + .Navigation(e => e.OneToManyPrincipal) + .UsePropertyAccessMode(PropertyAccessMode.Property); Assert.Equal(PropertyAccessMode.FieldDuringConstruction, model.GetPropertyAccessMode()); diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipStringTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipStringTest.cs index 5d520dcf4f2..5b15b3e82b6 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipStringTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipStringTest.cs @@ -106,20 +106,16 @@ public override TestEntityTypeBuilder OwnsMany( r => buildAction(new GenericStringTestOwnedNavigationBuilder(r)))); public override TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericStringTestReferenceNavigationBuilder( EntityTypeBuilder.HasOne( - navigationExpression?.GetPropertyAccess()?.GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess()?.GetSimpleMemberName())); public override TestCollectionNavigationBuilder HasMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) => new GenericStringTestCollectionNavigationBuilder( EntityTypeBuilder.HasMany( - navigationExpression?.GetPropertyAccess()?.GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess()?.GetSimpleMemberName())); } private class GenericStringTestReferenceNavigationBuilder : @@ -134,20 +130,16 @@ public GenericStringTestReferenceNavigationBuilder( } public override TestReferenceCollectionBuilder WithMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) => new GenericStringTestReferenceCollectionBuilder( ReferenceNavigationBuilder.WithMany( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); public override TestReferenceReferenceBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericStringTestReferenceReferenceBuilder( ReferenceNavigationBuilder.WithOne( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); } private class GenericStringTestCollectionNavigationBuilder @@ -162,12 +154,10 @@ public GenericStringTestCollectionNavigationBuilder( } public override TestReferenceCollectionBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericStringTestReferenceCollectionBuilder( CollectionNavigationBuilder.WithOne( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); } private class GenericStringTestReferenceCollectionBuilder diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipTypeTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipTypeTest.cs index 27096860321..1c6e13d7eaa 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipTypeTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericRelationshipTypeTest.cs @@ -71,10 +71,9 @@ public override TestEntityTypeBuilder OwnsOne( r => buildAction(new GenericTypeTestOwnedNavigationBuilder(r)))); public override TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericTypeTestReferenceNavigationBuilder( - EntityTypeBuilder.HasOne(navigationExpression, navigationConfiguration)); + EntityTypeBuilder.HasOne(navigationExpression)); } private class GenericTypeTestReferenceNavigationBuilder : GenericTestReferenceNavigationBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericTypeTestReferenceReferenceBuilder( - ReferenceNavigationBuilder.WithOne(navigationExpression, navigationConfiguration)); + ReferenceNavigationBuilder.WithOne(navigationExpression)); } private class GenericTypeTestReferenceReferenceBuilder diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs index a9ebbddbaa8..245501890cb 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs @@ -270,27 +270,21 @@ public override TestEntityTypeBuilder OwnsMany( navigationExpression, r => buildAction(new GenericTestOwnedNavigationBuilder(r)))); - public override TestReferenceNavigationBuilder HasOne( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceNavigationBuilder HasOne(string navigationName) => new GenericTestReferenceNavigationBuilder( - EntityTypeBuilder.HasOne(navigationName, navigationConfiguration)); + EntityTypeBuilder.HasOne(navigationName)); public override TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) - => new GenericTestReferenceNavigationBuilder(EntityTypeBuilder.HasOne(navigationExpression, navigationConfiguration)); + Expression> navigationExpression = null) + => new GenericTestReferenceNavigationBuilder(EntityTypeBuilder.HasOne(navigationExpression)); - public override TestCollectionNavigationBuilder HasMany( - string navigationName, - Action navigationConfiguration = null) + public override TestCollectionNavigationBuilder HasMany(string navigationName) => new GenericTestCollectionNavigationBuilder( - EntityTypeBuilder.HasMany(navigationName, navigationConfiguration)); + EntityTypeBuilder.HasMany(navigationName)); public override TestCollectionNavigationBuilder HasMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) - => new GenericTestCollectionNavigationBuilder(EntityTypeBuilder.HasMany(navigationExpression, navigationConfiguration)); + Expression>> navigationExpression = null) + => new GenericTestCollectionNavigationBuilder(EntityTypeBuilder.HasMany(navigationExpression)); public override TestEntityTypeBuilder HasQueryFilter(Expression> filter) => Wrap(EntityTypeBuilder.HasQueryFilter(filter)); @@ -475,29 +469,23 @@ public GenericTestReferenceNavigationBuilder(ReferenceNavigationBuilder ReferenceNavigationBuilder { get; } - public override TestReferenceCollectionBuilder WithMany( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceCollectionBuilder WithMany(string navigationName) => new GenericTestReferenceCollectionBuilder( - ReferenceNavigationBuilder.WithMany(navigationName, navigationConfiguration)); + ReferenceNavigationBuilder.WithMany(navigationName)); public override TestReferenceCollectionBuilder WithMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) => new GenericTestReferenceCollectionBuilder( - ReferenceNavigationBuilder.WithMany(navigationExpression, navigationConfiguration)); + ReferenceNavigationBuilder.WithMany(navigationExpression)); - public override TestReferenceReferenceBuilder WithOne( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceReferenceBuilder WithOne(string navigationName) => new GenericTestReferenceReferenceBuilder( - ReferenceNavigationBuilder.WithOne(navigationName, navigationConfiguration)); + ReferenceNavigationBuilder.WithOne(navigationName)); public override TestReferenceReferenceBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericTestReferenceReferenceBuilder( - ReferenceNavigationBuilder.WithOne(navigationExpression, navigationConfiguration)); + ReferenceNavigationBuilder.WithOne(navigationExpression)); } protected class GenericTestCollectionNavigationBuilder : @@ -512,17 +500,14 @@ public GenericTestCollectionNavigationBuilder(CollectionNavigationBuilder CollectionNavigationBuilder { get; } - public override TestReferenceCollectionBuilder WithOne( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceCollectionBuilder WithOne(string navigationName) => new GenericTestReferenceCollectionBuilder( - CollectionNavigationBuilder.WithOne(navigationName, navigationConfiguration)); + CollectionNavigationBuilder.WithOne(navigationName)); public override TestReferenceCollectionBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new GenericTestReferenceCollectionBuilder( - CollectionNavigationBuilder.WithOne(navigationExpression, navigationConfiguration)); + CollectionNavigationBuilder.WithOne(navigationExpression)); public override TestCollectionCollectionBuilder WithMany( string navigationName) diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericStringTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericStringTest.cs index e803b70fdf8..59b762fbd75 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericStringTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericStringTest.cs @@ -144,22 +144,18 @@ public override TestEntityTypeBuilder OwnsMany( r => buildAction(new NonGenericTestOwnedNavigationBuilder(r)))); public override TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new NonGenericStringTestReferenceNavigationBuilder( EntityTypeBuilder.HasOne( typeof(TRelatedEntity).FullName, - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); public override TestCollectionNavigationBuilder HasMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) => new NonGenericTestCollectionNavigationBuilder( EntityTypeBuilder.HasMany( typeof(TRelatedEntity).FullName, - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); } private class NonGenericStringTestReferenceNavigationBuilder @@ -173,12 +169,10 @@ public NonGenericStringTestReferenceNavigationBuilder(ReferenceNavigationBuilder } public override TestReferenceReferenceBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new NonGenericStringTestReferenceReferenceBuilder( ReferenceNavigationBuilder.WithOne( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); } private class NonGenericStringTestReferenceReferenceBuilder diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs index 08325877606..1d021800566 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs @@ -222,35 +222,27 @@ public override TestEntityTypeBuilder OwnsMany( navigationExpression.GetPropertyAccess().GetSimpleMemberName(), r => buildAction(new NonGenericTestOwnedNavigationBuilder(r)))); - public override TestReferenceNavigationBuilder HasOne( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceNavigationBuilder HasOne(string navigationName) => new NonGenericTestReferenceNavigationBuilder( - EntityTypeBuilder.HasOne(navigationName, navigationConfiguration)); + EntityTypeBuilder.HasOne(navigationName)); public override TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new NonGenericTestReferenceNavigationBuilder( EntityTypeBuilder.HasOne( typeof(TRelatedEntity), - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); - public override TestCollectionNavigationBuilder HasMany( - string navigationName, - Action navigationConfiguration = null) + public override TestCollectionNavigationBuilder HasMany(string navigationName) => new NonGenericTestCollectionNavigationBuilder( - EntityTypeBuilder.HasMany(typeof(TRelatedEntity), navigationName, navigationConfiguration)); + EntityTypeBuilder.HasMany(typeof(TRelatedEntity), navigationName)); public override TestCollectionNavigationBuilder HasMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) => new NonGenericTestCollectionNavigationBuilder( EntityTypeBuilder.HasMany( typeof(TRelatedEntity), - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); public override TestEntityTypeBuilder HasQueryFilter(Expression> filter) => Wrap(EntityTypeBuilder.HasQueryFilter(filter)); @@ -449,33 +441,25 @@ public NonGenericTestReferenceNavigationBuilder(ReferenceNavigationBuilder refer protected ReferenceNavigationBuilder ReferenceNavigationBuilder { get; } - public override TestReferenceCollectionBuilder WithMany( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceCollectionBuilder WithMany(string navigationName) => new NonGenericTestReferenceCollectionBuilder( - ReferenceNavigationBuilder.WithMany(navigationName, navigationConfiguration)); + ReferenceNavigationBuilder.WithMany(navigationName)); public override TestReferenceCollectionBuilder WithMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) => new NonGenericTestReferenceCollectionBuilder( ReferenceNavigationBuilder.WithMany( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); - public override TestReferenceReferenceBuilder WithOne( - string navigationName, - Action navigationConfiguration = null) + public override TestReferenceReferenceBuilder WithOne(string navigationName) => new NonGenericTestReferenceReferenceBuilder( - ReferenceNavigationBuilder.WithOne(navigationName, navigationConfiguration)); + ReferenceNavigationBuilder.WithOne(navigationName)); public override TestReferenceReferenceBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new NonGenericTestReferenceReferenceBuilder( ReferenceNavigationBuilder.WithOne( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); } protected class NonGenericTestCollectionNavigationBuilder @@ -491,18 +475,15 @@ public NonGenericTestCollectionNavigationBuilder(CollectionNavigationBuilder col private CollectionNavigationBuilder CollectionNavigationBuilder { get; } public override TestReferenceCollectionBuilder WithOne( - string navigationName, - Action navigationConfiguration = null) + string navigationName) => new NonGenericTestReferenceCollectionBuilder( - CollectionNavigationBuilder.WithOne(navigationName, navigationConfiguration)); + CollectionNavigationBuilder.WithOne(navigationName)); public override TestReferenceCollectionBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new NonGenericTestReferenceCollectionBuilder( CollectionNavigationBuilder.WithOne( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); public override TestCollectionCollectionBuilder WithMany( string navigationName) diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericUnqualifiedStringTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericUnqualifiedStringTest.cs index 6c96e4c2763..e362f9c8672 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericUnqualifiedStringTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericUnqualifiedStringTest.cs @@ -91,27 +91,25 @@ public override TestEntityTypeBuilder OwnsMany( r => buildAction(new NonGenericTestOwnedNavigationBuilder(r)))); public override TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) { var navigationName = navigationExpression?.GetPropertyAccess().GetSimpleMemberName(); return new NonGenericStringTestReferenceNavigationBuilder( navigationName == null - ? EntityTypeBuilder.HasOne(typeof(TRelatedEntity).FullName, navigationName, navigationConfiguration) - : EntityTypeBuilder.HasOne(navigationName, navigationConfiguration)); + ? EntityTypeBuilder.HasOne(typeof(TRelatedEntity).FullName, navigationName) + : EntityTypeBuilder.HasOne(navigationName)); } public override TestCollectionNavigationBuilder HasMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) { var navigationName = navigationExpression?.GetPropertyAccess().GetSimpleMemberName(); return new NonGenericTestCollectionNavigationBuilder( navigationName == null - ? EntityTypeBuilder.HasMany(typeof(TRelatedEntity).FullName, navigationName, navigationConfiguration) - : EntityTypeBuilder.HasMany(navigationName, navigationConfiguration)); + ? EntityTypeBuilder.HasMany(typeof(TRelatedEntity).FullName, navigationName) + : EntityTypeBuilder.HasMany(navigationName)); } } @@ -126,12 +124,10 @@ public NonGenericStringTestReferenceNavigationBuilder(ReferenceNavigationBuilder } public override TestReferenceReferenceBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) => new NonGenericStringTestReferenceReferenceBuilder( ReferenceNavigationBuilder.WithOne( - navigationExpression?.GetPropertyAccess().GetSimpleMemberName(), - navigationConfiguration)); + navigationExpression?.GetPropertyAccess().GetSimpleMemberName())); } private class NonGenericStringTestReferenceReferenceBuilder : NonGenericTestReferenceReferenceBuilder< diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs index e135b25521d..f6a3ae0e2a5 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs @@ -239,23 +239,19 @@ public abstract TestEntityTypeBuilder OwnsMany( where TRelatedEntity : class; public abstract TestReferenceNavigationBuilder HasOne( - string navigationName, - Action navigationConfiguration = null) + string navigationName) where TRelatedEntity : class; public abstract TestReferenceNavigationBuilder HasOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null) + Expression> navigationExpression = null) where TRelatedEntity : class; public abstract TestCollectionNavigationBuilder HasMany( - string navigationName, - Action navigationConfiguration = null) + string navigationName) where TRelatedEntity : class; public abstract TestCollectionNavigationBuilder HasMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null) + Expression>> navigationExpression = null) where TRelatedEntity : class; public abstract TestEntityTypeBuilder HasQueryFilter(Expression> filter); @@ -378,16 +374,12 @@ public abstract class TestCollectionNavigationBuilder where TEntity : class where TRelatedEntity : class { - public abstract TestReferenceCollectionBuilder WithOne( - string navigationName, - Action navigationConfiguration = null); + public abstract TestReferenceCollectionBuilder WithOne(string navigationName); public abstract TestReferenceCollectionBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null); + Expression> navigationExpression = null); - public abstract TestCollectionCollectionBuilder WithMany( - string navigationName); + public abstract TestCollectionCollectionBuilder WithMany(string navigationName); public abstract TestCollectionCollectionBuilder WithMany( Expression>> navigationExpression); @@ -397,21 +389,15 @@ public abstract class TestReferenceNavigationBuilder where TEntity : class where TRelatedEntity : class { - public abstract TestReferenceCollectionBuilder WithMany( - string navigationName, - Action navigationConfiguration = null); + public abstract TestReferenceCollectionBuilder WithMany(string navigationName); public abstract TestReferenceCollectionBuilder WithMany( - Expression>> navigationExpression = null, - Action navigationConfiguration = null); + Expression>> navigationExpression = null); - public abstract TestReferenceReferenceBuilder WithOne( - string navigationName, - Action navigationConfiguration = null); + public abstract TestReferenceReferenceBuilder WithOne(string navigationName); public abstract TestReferenceReferenceBuilder WithOne( - Expression> navigationExpression = null, - Action navigationConfiguration = null); + Expression> navigationExpression = null); } public abstract class TestReferenceCollectionBuilder diff --git a/test/EFCore.Tests/ModelBuilding/OneToManyTestBase.cs b/test/EFCore.Tests/ModelBuilding/OneToManyTestBase.cs index 71b3dfff6ac..8cda9bfa1a9 100644 --- a/test/EFCore.Tests/ModelBuilding/OneToManyTestBase.cs +++ b/test/EFCore.Tests/ModelBuilding/OneToManyTestBase.cs @@ -2691,48 +2691,6 @@ public virtual void Do_not_match_non_unique_FK_when_overlap_with_PK() modelBuilder.FinalizeModel(); } - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_HasOne_WithMany() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne( - e => e.OneToManyPrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)) - .WithMany( - e => e.Dependents, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToManyNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependents").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToManyPrincipal").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_named_HasOne_WithMany() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne( - "OneToManyPrincipal", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)) - .WithMany( - "Dependents", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToManyNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependents").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToManyPrincipal").GetPropertyAccessMode()); - } - [ConditionalFact] public virtual void Navigation_properties_can_set_access_mode_using_expressions() { diff --git a/test/EFCore.Tests/ModelBuilding/OneToOneTestBase.cs b/test/EFCore.Tests/ModelBuilding/OneToOneTestBase.cs index 63652785305..c842f900e44 100644 --- a/test/EFCore.Tests/ModelBuilding/OneToOneTestBase.cs +++ b/test/EFCore.Tests/ModelBuilding/OneToOneTestBase.cs @@ -4276,136 +4276,6 @@ private class Node public Node NextNode { get; set; } } - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_HasOne_WithOne_on_dependent() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne( - e => e.OneToOnePrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)) - .WithOne( - e => e.Dependent, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToOneNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependent").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToOnePrincipal").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_named_HasOne_WithOne_on_dependent() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne( - "OneToOnePrincipal", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)) - .WithOne( - "Dependent", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToOneNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependent").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToOnePrincipal").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_HasOne_WithOne_on_principal() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne( - e => e.Dependent, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne( - e => e.OneToOnePrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToOneNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependent").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToOnePrincipal").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_set_access_mode_using_named_HasOne_WithOne_on_principal() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne( - "Dependent", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne( - "OneToOnePrincipal", - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToOneNavPrincipal)); - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependent").GetPropertyAccessMode()); - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToOnePrincipal").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_override_access_mode_on_principal_using_WithOne_then_HasOne() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne() - .WithOne( - e => e.Dependent, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)); - - modelBuilder.Entity() - .HasOne( - e => e.Dependent, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)) - .WithOne(); - - var principal = (IEntityType)model.FindEntityType(typeof(OneToOneNavPrincipal)); - - Assert.Equal(PropertyAccessMode.Field, principal.FindNavigation("Dependent").GetPropertyAccessMode()); - } - - [ConditionalFact] - public virtual void Navigation_properties_can_override_access_mode_on_dependent_using_WithOne_then_HasOne() - { - var modelBuilder = CreateModelBuilder(); - var model = modelBuilder.Model; - - modelBuilder.Entity() - .HasOne() - .WithOne( - e => e.OneToOnePrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Field)); - - modelBuilder.Entity() - .HasOne( - e => e.OneToOnePrincipal, - nb => nb.UsePropertyAccessMode(PropertyAccessMode.Property)) - .WithOne(); - - var dependent = (IEntityType)model.FindEntityType(typeof(NavDependent)); - - Assert.Equal(PropertyAccessMode.Property, dependent.FindNavigation("OneToOnePrincipal").GetPropertyAccessMode()); - } - [ConditionalFact] public virtual void Navigation_properties_can_set_access_mode_using_expressions() {