During the development of a .Net Core API recently I was using EF Core 6 and needed to set up a Many To Many relationship. I found plenty of examples for how to create a Many to Many relationship between entities, and how to add a new relationship between the two. However, I found much less info on how to remove an EF Core many to many relationship.
In my particular case there was a table of Users and a table called Teams. The many to many relationship was between Users and Teams. I needed to remove the EF Core many to many relationship between one user and their old team.
How to remove the many to many link
I wanted to remove a User from a Team, and to do so I needed to remove the relationship that was defined in the TeamUsers table. I wrote the code that I thought would work – as follows:
var remove = await _context.TeamUsers
.FIrstOrDefaultAsync(x => x.TeamId == 20 && x.UserId == 5);
_context.TeamUsers.Remove(remove);
_context.Save();… but it didn’t remove the relationship. At that point I googled and found other people reporting the same code didn’t work and I struggled to find the answer.
The code that worked
Eventually I tried using .SingleAsync() instead of FirstOrDefaultAsync() and to my surprise it worked! The working code was as follows:
var remove = await _context.TeamUsers
.SingleAsync(x => x.TeamId == 20 && x.UserId == 5);
_context.TeamUsers.Remove(remove);
_context.Save();