diff --git a/entity-framework/core/what-is-new/ef-core-3.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-3.0/breaking-changes.md
index 8dc972ec4d..126de55187 100644
--- a/entity-framework/core/what-is-new/ef-core-3.0/breaking-changes.md
+++ b/entity-framework/core/what-is-new/ef-core-3.0/breaking-changes.md
@@ -15,7 +15,59 @@ The following API and behavior changes have the potential to break applications
Changes that we expect to only impact database providers are documented under [provider changes](../../providers/provider-log.md).
Breaks in new features introduced from one 3.0 preview to another 3.0 preview aren't documented here.
-## LINQ queries are no longer evaluated on the client
+## Summary
+
+| **Breaking change** | **Impact** |
+|:------------------------------------------------------------------------------------------------------------------|------------|
+| [LINQ queries are no longer evaluated on the client](#linq-queries-are-no-longer-evaluated-on-the-client) | High |
+| [The EF Core command-line tool, dotnet ef, is no longer part of the .NET Core SDK](#dotnet-ef) | High |
+| [FromSql, ExecuteSql, and ExecuteSqlAsync have been renamed](#fromsql) | High |
+| [Query types are consolidated with entity types](#qt) | High |
+| [Entity Framework Core is no longer part of the ASP.NET Core shared framework](#no-longer) | Medium |
+| [Cascade deletions now happen immediately by default](#cascade) | Medium |
+| [DeleteBehavior.Restrict has cleaner semantics](#deletebehavior) | Medium |
+| [Configuration API for owned type relationships has changed](#config) | Medium |
+| [Each property uses independent in-memory integer key generation](#each) | Medium |
+| [Metadata API changes](#metadata-api-changes) | Medium |
+| [Provider-specific Metadata API changes](#provider) | Medium |
+| [UseRowNumberForPaging has been removed](#urn) | Medium |
+| [FromSql methods can only be specified on query roots](#fromsql) | Low |
+| [~~Query execution is logged at Debug level~~ Reverted](#qe) | Low |
+| [Temporary key values are no longer set onto entity instances](#tkv) | Low |
+| [DetectChanges honors store-generated key values](#dc) | Low |
+| [Dependent entities sharing the table with the principal are now optional](#de) | Low |
+| [All entities sharing a table with a concurrency token column have to map it to a property](#aes) | Low |
+| [Inherited properties from unmapped types are now mapped to a single column for all derived types](#ip) | Low |
+| [The foreign key property convention no longer matches same name as the principal property](#fkp) | Low |
+| [Database connection is now closed if not used anymore before the TransactionScope has been completed](#dbc) | Low |
+| [Backing fields are used by default](#backing-fields-are-used-by-default) | Low |
+| [Throw if multiple compatible backing fields are found](#throw-if-multiple-compatible-backing-fields-are-found) | Low |
+| [Field-only property names should match the field name](#field-only-property-names-should-match-the-field-name) | Low |
+| [AddDbContext/AddDbContextPool no longer call AddLogging and AddMemoryCache](#adddbc) | Low |
+| [DbContext.Entry now performs a local DetectChanges](#dbe) | Low |
+| [String and byte array keys are not client-generated by default](#string-and-byte-array-keys-are-not-client-generated-by-default) | Low |
+| [ILoggerFactory is now a scoped service](#ilf) | Low |
+| [Lazy-loading proxies no longer assume navigation properties are fully loaded](#lazy-loading-proxies-no-longer-assume-navigation-properties-are-fully-loaded) | Low |
+| [Excessive creation of internal service providers is now an error by default](#excessive-creation-of-internal-service-providers-is-now-an-error-by-default) | Low |
+| [New behavior for HasOne/HasMany called with a single string](#nbh) | Low |
+| [The return type for several async methods has been changed from Task to ValueTask](#rtnt) | Low |
+| [The Relational:TypeMapping annotation is now just TypeMapping](#rtt) | Low |
+| [ToTable on a derived type throws an exception](#totable-on-a-derived-type-throws-an-exception) | Low |
+| [EF Core no longer sends pragma for SQLite FK enforcement](#pragma) | Low |
+| [Microsoft.EntityFrameworkCore.Sqlite now depends on SQLitePCLRaw.bundle_e_sqlite3](#sqlite3) | Low |
+| [Guid values are now stored as TEXT on SQLite](#guid) | Low |
+| [Char values are now stored as TEXT on SQLite](#char) | Low |
+| [Migration IDs are now generated using the invariant culture's calendar](#migid) | Low |
+| [Extension info/metadata has been removed from IDbContextOptionsExtension](#xinfo) | Low |
+| [LogQueryPossibleExceptionWithAggregateOperator has been renamed](#lqpe) | Low |
+| [Clarify API for foreign key constraint names](#clarify) | Low |
+| [IRelationalDatabaseCreator.HasTables/HasTablesAsync have been made public](#irdc2) | Low |
+| [Microsoft.EntityFrameworkCore.Design is now a DevelopmentDependency package](#dip) | Low |
+| [SQLitePCL.raw updated to version 2.0.0](#SQLitePCL) | Low |
+| [NetTopologySuite updated to version 2.0.0](#NetTopologySuite) | Low |
+| [Multiple ambiguous self-referencing relationships must be configured](#mersa) | Low |
+
+### LINQ queries are no longer evaluated on the client
[Tracking Issue #14935](https://github.com/aspnet/EntityFrameworkCore/issues/14935)
[Also see issue #12795](https://github.com/aspnet/EntityFrameworkCore/issues/12795)
@@ -46,7 +98,8 @@ Besides this, automatic client evaluation can lead to issues in which improving
If a query can't be fully translated, then either rewrite the query in a form that can be translated, or use `AsEnumerable()`, `ToList()`, or similar to explicitly bring data back to the client where it can then be further processed using LINQ-to-Objects.
-## Entity Framework Core is no longer part of the ASP.NET Core shared framework
+
+### Entity Framework Core is no longer part of the ASP.NET Core shared framework
[Tracking Issue Announcements#325](https://github.com/aspnet/Announcements/issues/325)
@@ -72,7 +125,8 @@ Developers can also now control exactly when EF Core and EF Core data providers
To use EF Core in an ASP.NET Core 3.0 application or any other supported application, explicitly add a package reference to the EF Core database provider that your application will use.
-## The EF Core command-line tool, dotnet ef, is no longer part of the .NET Core SDK
+
+### The EF Core command-line tool, dotnet ef, is no longer part of the .NET Core SDK
[Tracking Issue #14016](https://github.com/aspnet/EntityFrameworkCore/issues/14016)
@@ -100,7 +154,8 @@ To be able to manage migrations or scaffold a `DbContext`, install `dotnet-ef` a
You can also obtain it a local tool when you restore the dependencies of a project that declares it as a tooling dependency using a [tool manifest file](https://github.com/dotnet/cli/issues/10288).
-## FromSql, ExecuteSql, and ExecuteSqlAsync have been renamed
+
+### FromSql, ExecuteSql, and ExecuteSqlAsync have been renamed
[Tracking Issue #10996](https://github.com/aspnet/EntityFrameworkCore/issues/10996)
@@ -140,7 +195,9 @@ This could result in queries not being parameterized when they should have been.
Switch to use the new method names.
-## FromSql methods can only be specified on query roots
+
+
+### FromSql methods can only be specified on query roots
[Tracking Issue #15704](https://github.com/aspnet/EntityFrameworkCore/issues/15704)
@@ -162,7 +219,9 @@ Specifying `FromSql` anywhere other than on a `DbSet` had no added meaning or ad
`FromSql` invocations should be moved to be directly on the `DbSet` to which they apply.
-## ~~Query execution is logged at Debug level~~ Reverted
+
+
+### ~~Query execution is logged at Debug level~~ Reverted
[Tracking Issue #14523](https://github.com/aspnet/EntityFrameworkCore/issues/14523)
@@ -176,7 +235,9 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
.ConfigureWarnings(c => c.Log((RelationalEventId.CommandExecuting, LogLevel.Debug)));
```
-## Temporary key values are no longer set onto entity instances
+
+
+### Temporary key values are no longer set onto entity instances
[Tracking Issue #12378](https://github.com/aspnet/EntityFrameworkCore/issues/12378)
@@ -204,7 +265,9 @@ This can be avoided by:
* Obtain the actual temporary key values from the entity's tracking information.
For example, `context.Entry(blog).Property(e => e.Id).CurrentValue` will return the temporary value even though `blog.Id` itself hasn't been set.
-## DetectChanges honors store-generated key values
+
+
+### DetectChanges honors store-generated key values
[Tracking Issue #14616](https://github.com/aspnet/EntityFrameworkCore/issues/14616)
@@ -243,8 +306,8 @@ Or with data annotations:
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string Id { get; set; }
```
-
-## Cascade deletions now happen immediately by default
+
+### Cascade deletions now happen immediately by default
[Tracking Issue #10114](https://github.com/aspnet/EntityFrameworkCore/issues/10114)
@@ -272,8 +335,8 @@ For example:
context.ChangeTracker.CascadeDeleteTiming = CascadeTiming.OnSaveChanges;
context.ChangeTracker.DeleteOrphansTiming = CascadeTiming.OnSaveChanges;
```
-
-## DeleteBehavior.Restrict has cleaner semantics
+
+### DeleteBehavior.Restrict has cleaner semantics
[Tracking Issue #12661](https://github.com/aspnet/EntityFrameworkCore/issues/12661)
@@ -295,7 +358,8 @@ This change was made to improve the experience for using `DeleteBehavior` in an
The previous behavior can be restored by using `DeleteBehavior.ClientNoAction`.
-## Query types are consolidated with entity types
+
+### Query types are consolidated with entity types
[Tracking Issue #14194](https://github.com/aspnet/EntityFrameworkCore/issues/14194)
@@ -325,7 +389,8 @@ This would still not be configured by convention to avoid misconfiguration when
* **`DbQuery<>`** - Instead `DbSet<>` should be used.
* **`DbContext.Query<>()`** - Instead `DbContext.Set<>()` should be used.
-## Configuration API for owned type relationships has changed
+
+### Configuration API for owned type relationships has changed
[Tracking Issue #12444](https://github.com/aspnet/EntityFrameworkCore/issues/12444)
[Tracking Issue #9148](https://github.com/aspnet/EntityFrameworkCore/issues/9148)
@@ -383,7 +448,9 @@ This in turn removes ambiguity and confusion around methods like `HasForeignKey`
Change configuration of owned type relationships to use the new API surface as shown in the example above.
-## Dependent entities sharing the table with the principal are now optional
+
+
+### Dependent entities sharing the table with the principal are now optional
[Tracking Issue #9005](https://github.com/aspnet/EntityFrameworkCore/issues/9005)
@@ -418,7 +485,9 @@ When querying EF Core sets `OrderDetails` to `null` if any of its required prope
If your model has a table sharing dependent with all optional columns, but the navigation pointing to it is not expected to be `null` then the application should be modified to handle cases when the navigation is `null`. If this is not possible a required property should be added to the entity type or at least one property should have a non-`null` value assigned to it.
-## All entities sharing a table with a concurrency token column have to map it to a property
+
+
+### All entities sharing a table with a concurrency token column have to map it to a property
[Tracking Issue #14154](https://github.com/aspnet/EntityFrameworkCore/issues/14154)
@@ -470,7 +539,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
}
```
-## Inherited properties from unmapped types are now mapped to a single column for all derived types
+
+
+### Inherited properties from unmapped types are now mapped to a single column for all derived types
[Tracking Issue #13998](https://github.com/aspnet/EntityFrameworkCore/issues/13998)
@@ -533,7 +604,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
}
```
-## The foreign key property convention no longer matches same name as the principal property
+
+
+### The foreign key property convention no longer matches same name as the principal property
[Tracking Issue #13274](https://github.com/aspnet/EntityFrameworkCore/issues/13274)
@@ -601,7 +674,9 @@ This change was made to avoid erroneously defining a primary key property on the
If the property was intended to be the foreign key, and hence part of the primary key, then explicitly configure it as such.
-## Database connection is now closed if not used anymore before the TransactionScope has been completed
+
+
+### Database connection is now closed if not used anymore before the TransactionScope has been completed
[Tracking Issue #14218](https://github.com/aspnet/EntityFrameworkCore/issues/14218)
@@ -653,7 +728,9 @@ using (new TransactionScope())
}
```
-## Each property uses independent in-memory integer key generation
+
+
+### Each property uses independent in-memory integer key generation
[Tracking Issue #6872](https://github.com/aspnet/EntityFrameworkCore/issues/6872)
@@ -677,7 +754,7 @@ This change was made to align in-memory key generation more closely to real data
This can break an application that is relying on specific in-memory key values to be set.
Consider instead not relying on specific key values, or updating to match the new behavior.
-## Backing fields are used by default
+### Backing fields are used by default
[Tracking Issue #12430](https://github.com/aspnet/EntityFrameworkCore/issues/12430)
@@ -706,7 +783,7 @@ For example:
modelBuilder.UsePropertyAccessMode(PropertyAccessMode.PreferFieldDuringConstruction);
```
-## Throw if multiple compatible backing fields are found
+### Throw if multiple compatible backing fields are found
[Tracking Issue #12523](https://github.com/aspnet/EntityFrameworkCore/issues/12523)
@@ -737,7 +814,7 @@ modelBuilder
.HasField("_id");
```
-## Field-only property names should match the field name
+### Field-only property names should match the field name
This change is introduced in EF Core 3.0-preview 4.
@@ -783,7 +860,9 @@ modelBuilder
.HasField("_id");
```
-## AddDbContext/AddDbContextPool no longer call AddLogging and AddMemoryCache
+
+
+### AddDbContext/AddDbContextPool no longer call AddLogging and AddMemoryCache
[Tracking Issue #14756](https://github.com/aspnet/EntityFrameworkCore/issues/14756)
@@ -805,7 +884,9 @@ EF Core 3.0 does not require that these services are in the application's DI con
If your application needs these services, then register them explicitly with the DI container using [AddLogging](https://docs.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.loggingservicecollectionextensions.addlogging) or [AddMemoryCache](https://docs.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.memorycacheservicecollectionextensions.addmemorycache).
-## DbContext.Entry now performs a local DetectChanges
+
+
+### DbContext.Entry now performs a local DetectChanges
[Tracking Issue #13552](https://github.com/aspnet/EntityFrameworkCore/issues/13552)
@@ -833,7 +914,7 @@ This change was made to improve the default performance of using `context.Entry`
Call `ChgangeTracker.DetectChanges()` explicitly before calling `Entry` to ensure the pre-3.0 behavior.
-## String and byte array keys are not client-generated by default
+### String and byte array keys are not client-generated by default
[Tracking Issue #14617](https://github.com/aspnet/EntityFrameworkCore/issues/14617)
@@ -871,7 +952,9 @@ Or with data annotations:
public string Id { get; set; }
```
-## ILoggerFactory is now a scoped service
+
+
+### ILoggerFactory is now a scoped service
[Tracking Issue #14698](https://github.com/aspnet/EntityFrameworkCore/issues/14698)
@@ -897,7 +980,7 @@ In these cases, most things will still work, but any singleton service that was
If you run into situations like this, please file an issue at on the [EF Core GitHub issue tracker](https://github.com/aspnet/EntityFrameworkCore/issues) to let us know how you are using `ILoggerFactory` such that we can better understand how not to break this again in the future.
-## Lazy-loading proxies no longer assume navigation properties are fully loaded
+### Lazy-loading proxies no longer assume navigation properties are fully loaded
[Tracking Issue #12780](https://github.com/aspnet/EntityFrameworkCore/issues/12780)
@@ -924,7 +1007,7 @@ This change was made to make the behavior consistent and correct when attempting
Update application code to not attempt lazy-loading with a disposed context, or configure this to be a no-op as described in the exception message.
-## Excessive creation of internal service providers is now an error by default
+### Excessive creation of internal service providers is now an error by default
[Tracking Issue #10236](https://github.com/aspnet/EntityFrameworkCore/issues/10236)
@@ -956,7 +1039,9 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
}
```
-## New behavior for HasOne/HasMany called with a single string
+
+
+### New behavior for HasOne/HasMany called with a single string
[Tracking Issue #9171](https://github.com/aspnet/EntityFrameworkCore/issues/9171)
@@ -993,7 +1078,9 @@ For example:
modelBuilder.Entity().HasOne("Some.Entity.Type.Name", null).WithOne();
```
-## The return type for several async methods has been changed from Task to ValueTask
+
+
+### The return type for several async methods has been changed from Task to ValueTask
[Tracking Issue #15184](https://github.com/aspnet/EntityFrameworkCore/issues/15184)
@@ -1023,7 +1110,9 @@ Applications simply awaiting the above APIs only need to be recompiled - no sour
A more complex usage (e.g. passing the returned `Task` to `Task.WhenAny()`) typically require that the returned `ValueTask` be converted to a `Task` by calling `AsTask()` on it.
Note that this negates the allocation reduction that this change brings.
-## The Relational:TypeMapping annotation is now just TypeMapping
+
+
+### The Relational:TypeMapping annotation is now just TypeMapping
[Tracking Issue #9913](https://github.com/aspnet/EntityFrameworkCore/issues/9913)
@@ -1046,7 +1135,7 @@ Type mappings are now used for more than just relational database providers.
This will only break applications that access the type mapping directly as an annotation, which isn't common.
The most appropriate action to fix is to use API surface to access type mappings rather than using the annotation directly.
-## ToTable on a derived type throws an exception
+### ToTable on a derived type throws an exception
[Tracking Issue #11811](https://github.com/aspnet/EntityFrameworkCore/issues/11811)
@@ -1069,7 +1158,7 @@ This change avoids breaking in the future when it becomes a valid thing to do.
Remove any attempts to map derived types to other tables.
-## ForSqlServerHasIndex replaced with HasIndex
+### ForSqlServerHasIndex replaced with HasIndex
[Tracking Issue #12366](https://github.com/aspnet/EntityFrameworkCore/issues/12366)
@@ -1092,7 +1181,7 @@ This change was made to consolidate the API for indexes with `Include` into one
Use the new API, as shown above.
-## Metadata API changes
+### Metadata API changes
[Tracking Issue #214](https://github.com/aspnet/EntityFrameworkCore/issues/214)
@@ -1116,7 +1205,9 @@ This change simplifies the implementation of the aforementioned interfaces.
Use the new extension methods.
-## Provider-specific Metadata API changes
+
+
+### Provider-specific Metadata API changes
[Tracking Issue #214](https://github.com/aspnet/EntityFrameworkCore/issues/214)
@@ -1138,7 +1229,9 @@ This change simplifies the implementation of the aforementioned extension method
Use the new extension methods.
-## EF Core no longer sends pragma for SQLite FK enforcement
+
+
+### EF Core no longer sends pragma for SQLite FK enforcement
[Tracking Issue #12151](https://github.com/aspnet/EntityFrameworkCore/issues/12151)
@@ -1161,7 +1254,9 @@ This change was made because EF Core uses `SQLitePCLRaw.bundle_e_sqlite3` by def
Foreign keys are enabled by default in SQLitePCLRaw.bundle_e_sqlite3, which is used by default for EF Core.
For other cases, foreign keys can be enabled by specifying `Foreign Keys=True` in your connection string.
-## Microsoft.EntityFrameworkCore.Sqlite now depends on SQLitePCLRaw.bundle_e_sqlite3
+
+
+### Microsoft.EntityFrameworkCore.Sqlite now depends on SQLitePCLRaw.bundle_e_sqlite3
**Old behavior**
@@ -1179,7 +1274,9 @@ This change was made so that the version of SQLite used on iOS consistent with o
To use the native SQLite version on iOS, configure `Microsoft.Data.Sqlite` to use a different `SQLitePCLRaw` bundle.
-## Guid values are now stored as TEXT on SQLite
+
+
+### Guid values are now stored as TEXT on SQLite
[Tracking Issue #15078](https://github.com/aspnet/EntityFrameworkCore/issues/15078)
@@ -1187,7 +1284,7 @@ This change is introduced in EF Core 3.0-preview 4.
**Old behavior**
-Guid values were previously sored as BLOB values on SQLite.
+Guid values were previously stored as BLOB values on SQLite.
**New behavior**
@@ -1229,7 +1326,9 @@ modelBuilder
Microsoft.Data.Sqlite remains capable of reading Guid values from both BLOB and TEXT columns; however, since the default format for parameters and constants has changed you'll likely need to take action for most scenarios involving Guids.
-## Char values are now stored as TEXT on SQLite
+
+
+### Char values are now stored as TEXT on SQLite
[Tracking Issue #15020](https://github.com/aspnet/EntityFrameworkCore/issues/15020)
@@ -1270,7 +1369,9 @@ modelBuilder
Microsoft.Data.Sqlite also remains capable of reading character values from both INTEGER and TEXT columns, so certain scenarios may not require any action.
-## Migration IDs are now generated using the invariant culture's calendar
+
+
+### Migration IDs are now generated using the invariant culture's calendar
[Tracking Issue #12978](https://github.com/aspnet/EntityFrameworkCore/issues/12978)
@@ -1309,7 +1410,9 @@ UPDATE __EFMigrationsHistory
SET MigrationId = CONCAT(LEFT(MigrationId, 4) - 543, SUBSTRING(MigrationId, 4, 150))
```
-## UseRowNumberForPaging has been removed
+
+
+### UseRowNumberForPaging has been removed
[Tracking Issue #16400](https://github.com/aspnet/EntityFrameworkCore/issues/16400)
@@ -1331,7 +1434,9 @@ We are making this change because [SQL Server 2008 is no longer a supported prod
We recommend updating to a newer version of SQL Server, or using a higher compatibility level, so that the generated SQL is supported. That being said, if you are unable to do this, then please [comment on the tracking issue](https://github.com/aspnet/EntityFrameworkCore/issues/16400) with details. We may revisit this decision based on feedback.
-## Extension info/metadata has been removed from IDbContextOptionsExtension
+
+
+### Extension info/metadata has been removed from IDbContextOptionsExtension
[Tracking Issue #16119](https://github.com/aspnet/EntityFrameworkCore/issues/16119)
@@ -1355,7 +1460,9 @@ Breaking them out into a new abstract base class will make it easier to make the
Update extensions to follow the new pattern.
Examples are found in the many implementations of `IDbContextOptionsExtension` for different kinds of extensions in the EF Core source code.
-## LogQueryPossibleExceptionWithAggregateOperator has been renamed
+
+
+### LogQueryPossibleExceptionWithAggregateOperator has been renamed
[Tracking Issue #10985](https://github.com/aspnet/EntityFrameworkCore/issues/10985)
@@ -1373,7 +1480,9 @@ Aligns the naming of this warning event with all other warning events.
Use the new name. (Note that the event ID number has not changed.)
-## Clarify API for foreign key constraint names
+
+
+### Clarify API for foreign key constraint names
[Tracking Issue #10730](https://github.com/aspnet/EntityFrameworkCore/issues/10730)
@@ -1403,7 +1512,9 @@ This change brings consistency to naming in this area, and also clarifies that t
Use the new name.
-## IRelationalDatabaseCreator.HasTables/HasTablesAsync have been made public
+
+
+### IRelationalDatabaseCreator.HasTables/HasTablesAsync have been made public
[Tracking Issue #15997](https://github.com/aspnet/EntityFrameworkCore/issues/15997)
@@ -1425,7 +1536,9 @@ These methods are used by EF to determine if a database is created but empty. Th
Change the accessibility of any overrides.
-## Microsoft.EntityFrameworkCore.Design is now a DevelopmentDependency package
+
+
+### Microsoft.EntityFrameworkCore.Design is now a DevelopmentDependency package
[Tracking Issue #11506](https://github.com/aspnet/EntityFrameworkCore/issues/11506)
@@ -1455,7 +1568,9 @@ If you need to reference this package to override EF Core's design-time behavior
```
-## SQLitePCL.raw updated to version 2.0.0
+
+
+### SQLitePCL.raw updated to version 2.0.0
[Tracking Issue #14824](https://github.com/aspnet/EntityFrameworkCore/issues/14824)
@@ -1477,8 +1592,9 @@ Version 2.0.0 of SQLitePCL.raw targets .NET Standard 2.0. It previously targeted
SQLitePCL.raw version 2.0.0 includes some breaking changes. See the [release notes](https://github.com/ericsink/SQLitePCL.raw/blob/v2/v2.md) for details.
+
-## NetTopologySuite updated to version 2.0.0
+### NetTopologySuite updated to version 2.0.0
[Tracking Issue #14825](https://github.com/aspnet/EntityFrameworkCore/issues/14825)
@@ -1499,3 +1615,50 @@ Version 2.0.0 of NetTopologySuite aims to address several usability issues encou
**Mitigations**
NetTopologySuite version 2.0.0 includes some breaking changes. See the [release notes](https://www.nuget.org/packages/NetTopologySuite/2.0.0-pre001) for details.
+
+
+
+### Multiple ambiguous self-referencing relationships must be configured
+
+[Tracking Issue #13573](https://github.com/aspnet/EntityFrameworkCore/issues/13573)
+
+This change is introduced in EF Core 3.0-preview 6.
+
+**Old behavior**
+
+An entity type with multiple self-referencing uni-directional navigation properties and matching FKs was incorrectly configured as a single relationship. For example:
+
+```C#
+public class User
+{
+ public Guid Id { get; set; }
+ public User CreatedBy { get; set; }
+ public User UpdatedBy { get; set; }
+ public Guid CreatedById { get; set; }
+ public Guid? UpdatedById { get; set; }
+}
+```
+
+**New behavior**
+
+This scenario is now detected in model building and an exception is thrown indicating that the model is ambiguous.
+
+**Why**
+
+The resultant model was ambiguous and will likely usually be wrong for this case.
+
+**Mitigations**
+
+Use full configuration of the relationship. For example:
+
+```C#
+modelBuilder
+ .Entity()
+ .HasOne(e => e.CreatedBy)
+ .WithMany();
+
+ modelBuilder
+ .Entity()
+ .HasOne(e => e.UpdatedBy)
+ .WithMany();
+```