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
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();