Обновление данных в EF Core многие ко многим

Объясните пожалуйста, как работать с данными в случае связи многие ко многим (добавление, удаление)?

У меня WPF приложение, использую EF Core CodeFirst, БД - MS SQL Server. Есть две сущности:

public class User
{
    public int UserId { get; set; }
    public string Login { get; set; }
    public string Pass { get; set; }

    public List<Department> Departments { get; set; }
public class Department
{
    public int DepartmentId { get; set; }
    public string Name { get; set; }

    public List<User> Users { get; set; }

В БД создалась промежуточная таблица

Я пытаюсь добавить/удалить отделы у конкретного User'а. Какой код необходимо написать, чтобы все корректно сохранилось?

UPD: Появилась некая ясность: Чтобы работать с отделами конкретного пользователя и данные сохранялись в промежуточную таблицу, необходимо включить (Include) связанные отделы:

var user = db.Users.Include(u => u.Departments).SingleOrDefault(u => u.UserId == user.UserId);

а затем уже работать с ними. Например, полностью удалить:

if (user!= null)
{
    foreach (var dep in user.Departments.ToList())
        user.Departments.Remove(dep);
}

или добавить:

if (user!= null)
{
    foreach (var dep in userDeps.ToList())
        user.Departments.Add(dep);
}

не забываем db.SaveChanges();

По отдельности все работает хорошо. Но если у пользователя, допустим, есть два отдела, и один какой-то удаляем (или добавляем один/несколько), то как быть в этом случае?

Пробовал удалить и все и записать отделы по новой - получаю ошибку: введите сюда описание изображения

db.Entry(user).State = EntityState.Modified; и db.SaveChanges(); между двумя циклами удаления и добавления не помогли. Теперь вопрос такой: как быть именно с изменением отделов пользователя?

UPD2: Не нашел ничего лучше как оперировать с коллекцией имеющихся отделов у пользователя и с коллекцией "новых" отделов:

var dout = user.Departments.Except(userDeps).ToList();

Здесь я беру разность того что есть то что должно быть. Получаю - то что нужно удалить.

var din = userDeps.Except(user.Departments).ToList();
Здесь наоборот - беру разность того что должно быть и того что есть. Это нужно добавить. 

Ну а дальше циклами:

foreach(var dep in dout)
    user.Departments.Remove(dep);

foreach (var dep in din)
    user.Departments.Add(dep);

db.SaveChanges();

Это работает! Хотелось бы услышать мнение более опытных в этом вопросе программистов - это нормально, или есть более изящный способ изменения данных?