diff --git a/src/EFCore.Design/Properties/DesignStrings.Designer.cs b/src/EFCore.Design/Properties/DesignStrings.Designer.cs
index c8e3fcce942..140bb017da8 100644
--- a/src/EFCore.Design/Properties/DesignStrings.Designer.cs
+++ b/src/EFCore.Design/Properties/DesignStrings.Designer.cs
@@ -1,4 +1,4 @@
-//
+//
using System;
using System.Reflection;
@@ -615,7 +615,7 @@ public static string NoCreateHostBuilder
=> GetString("NoCreateHostBuilder");
///
- /// Using applicaiton service provider from Microsoft.Extensions.Hosting.
+ /// Using application service provider from Microsoft.Extensions.Hosting.
///
public static string UsingHostingServices
=> GetString("UsingHostingServices");
diff --git a/src/EFCore.Design/Properties/DesignStrings.resx b/src/EFCore.Design/Properties/DesignStrings.resx
index 4e92a75d4cd..cc751c89ed4 100644
--- a/src/EFCore.Design/Properties/DesignStrings.resx
+++ b/src/EFCore.Design/Properties/DesignStrings.resx
@@ -1,17 +1,17 @@
-
@@ -358,6 +358,6 @@ Change your target project to the migrations project by using the Package Manage
No static method 'CreateHostBuilder(string[])' was found on class 'Program'.
- Using applicaiton service provider from Microsoft.Extensions.Hosting.
+ Using application service provider from Microsoft.Extensions.Hosting.
\ No newline at end of file
diff --git a/src/EFCore/DbContext.cs b/src/EFCore/DbContext.cs
index a8243461c0d..94c34d5fe97 100644
--- a/src/EFCore/DbContext.cs
+++ b/src/EFCore/DbContext.cs
@@ -814,20 +814,30 @@ public virtual async ValueTask> AddAsync(
///
///
- /// Begins tracking the given entity in the state
- /// such that no operation will be performed when
- /// is called.
+ /// Begins tracking the given entity and entries reachable from the given entity using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
+ ///
+ ///
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure only new entities will be inserted.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
/// Use to set the state of only a single entity.
///
///
@@ -847,24 +857,30 @@ public virtual EntityEntry Attach([NotNull] TEntity entity)
///
///
- /// Begins tracking the given entity in the state such that it will
- /// be updated in the database when is called.
+ /// Begins tracking the given entity and entries reachable from the given entity using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
///
///
- /// All properties of the entity will be marked as modified. To mark only some properties as modified, use
- /// to begin tracking the entity in the
- /// state and then use the returned to mark the desired properties as modified.
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure new entities will be inserted, while existing entities will be updated.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
/// Use to set the state of only a single entity.
///
///
@@ -1002,20 +1018,30 @@ public virtual async ValueTask AddAsync(
///
///
- /// Begins tracking the given entity in the state
- /// such that no operation will be performed when
- /// is called.
+ /// Begins tracking the given entity and entries reachable from the given entity using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
+ ///
+ ///
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure only new entities will be inserted.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
/// Use to set the state of only a single entity.
///
///
@@ -1033,24 +1059,30 @@ public virtual EntityEntry Attach([NotNull] object entity)
///
///
- /// Begins tracking the given entity in the state such that it will
- /// be updated in the database when is called.
+ /// Begins tracking the given entity and entries reachable from the given entity using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
///
///
- /// All properties of the entity will be marked as modified. To mark only some properties as modified, use
- /// to begin tracking the entity in the
- /// state and then use the returned to mark the desired properties as modified.
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure new entities will be inserted, while existing entities will be updated.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
/// Use to set the state of only a single entity.
///
///
@@ -1158,19 +1190,32 @@ public virtual Task AddRangeAsync([NotNull] params object[] entities)
///
///
- /// Begins tracking the given entities in the state
- /// such that no operation will be performed when
- /// is called.
+ /// Begins tracking the given entities and entries reachable from the given entities using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
+ ///
+ ///
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure only new entities will be inserted.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
+ ///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
+ /// Use to set the state of only a single entity.
+ ///
///
/// The entities to attach.
public virtual void AttachRange([NotNull] params object[] entities)
@@ -1182,23 +1227,32 @@ public virtual void AttachRange([NotNull] params object[] entities)
///
///
- /// Begins tracking the given entities in the state such that they will
- /// be updated in the database when is called.
+ /// Begins tracking the given entities and entries reachable from the given entities using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
///
///
- /// All properties of each entity will be marked as modified. To mark only some properties as modified, use
- /// to begin tracking each entity in the
- /// state and then use the returned to mark the desired properties as modified.
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure new entities will be inserted, while existing entities will be updated.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
+ ///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
+ /// Use to set the state of only a single entity.
+ ///
///
/// The entities to update.
public virtual void UpdateRange([NotNull] params object[] entities)
@@ -1291,19 +1345,32 @@ await SetEntityStateAsync(
///
///
- /// Begins tracking the given entities in the state
- /// such that no operation will be performed when
- /// is called.
+ /// Begins tracking the given entities and entries reachable from the given entities using
+ /// the state by default, but see below for cases
+ /// when a different state will be used.
+ ///
+ ///
+ /// Generally, no database interaction will be performed until is called.
///
///
/// A recursive search of the navigation properties will be performed to find reachable entities
- /// that are not already being tracked by the context. These entities will also begin to be tracked
- /// by the context. If a reachable entity has its primary key value set
+ /// that are not already being tracked by the context. All entities found will be tracked
+ /// by the context.
+ ///
+ ///
+ /// For entity types with generated keys if an entity has its primary key value set
/// then it will be tracked in the state. If the primary key
/// value is not set then it will be tracked in the state.
+ /// This helps ensure only new entities will be inserted.
/// An entity is considered to have its primary key value set if the primary key property is set
/// to anything other than the CLR default for the property type.
///
+ ///
+ /// For entity types without generated keys, the state set is always .
+ ///
+ ///
+ /// Use to set the state of only a single entity.
+ ///
///
/// The entities to attach.
public virtual void AttachRange([NotNull] IEnumerable