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