ChangingAndChangedNotifications performs incorrect updates on Many-To-Many Relationships
- Dominant language
- C#
- Stars
- 14.8k
- Forks
- 3.4k
- PR merge metrics
- PR metrics pending
Description
## File a bug
### Include your code
Full reproduction code: https://github.com/AlmightyLks/WeirdBehaviour
Expected Behaviour: No-Op
Actual Behaviour: Alternating Delete / Insert Ops
TLDR:
Clearing and re-adding a navigation property's ICollection elements will alternatingly delete and insert them, [every other run](https://github.com/AlmightyLks/WeirdBehaviour/blob/f350a554ebd94ff2b1c7fa22138f91241713d690/WeirdBehaviour/Program.cs#L19-L22).
```C#
using var ctx = new ExampleContext();
var artists = ctx.Artists.First();
var songs = ctx.Songs.ToList();
artists.Songs.Clear();
foreach (var song in songs)
artists.Songs.Add(song);
ctx.SaveChanges();
```
The logging output of running this code twice in a row is more or less this:
```
First Time:
dbug: 05.09.2023 10:33:14.912 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
Executing DbCommand [Parameters=[@p0='3', @p1='7', @p2='3', @p3='8', @p4='3', @p5='9'], CommandType='Text', CommandTimeout='30']
SET NOCOUNT ON;
DELETE FROM [ArtistSong]
OUTPUT 1
WHERE [ArtistId] = @p0 AND [SongId] = @p1;
DELETE FROM [ArtistSong]
OUTPUT 1
WHERE [ArtistId] = @p2 AND [SongId] = @p3;
DELETE FROM [ArtistSong]
OUTPUT 1
WHERE [ArtistId] = @p4 AND [SongId] = @p5;
Second Time:
dbug: 05.09.2023 10:33:14.932 RelationalEventId.CommandExecuting[20100] (Microsoft.EntityFrameworkCore.Database.Command)
Executing DbCommand [Parameters=[@p0='3', @p1='7', @p2='3', @p3='8', @p4='3', @p5='9'], CommandType='Text', CommandTimeout='30']
SET IMPLICIT_TRANSACTIONS OFF;
SET NOCOUNT ON;
INSERT INTO [ArtistSong] ([ArtistId], [SongId])
VALUES (@p0, @p1),
(@p2, @p3),
(@p4, @p5);
```
This also happens using `Microsoft.EntityFrameworkCore.Proxies`'s `UseChangeTrackingProxies()`
### Include provider and version information
EF Core version: 7.0.10
Database provider: Microsoft.EntityFrameworkCore.SqlServer
Target framework: .NET 7.0
Operating system: Windows 10
IDE: Visual Studio 2022 17.7.0 Preview 5.0
Note: The issue still occurs with .NET 8 and EFC8 preview versions
Contributor guide
Assessment
This issue has not been assessed yet.