Когда вы вызываете Remove в DbSet, это означает, что этот объект удаляется из базы данных при вызове SaveChanges.Насколько я понимаю, вы действительно хотите удалить связь между двумя сущностями.Как правило, вы делаете это, удаляя одну сущность из свойства навигации по коллекции другой сущности.Например:
product.Activities.Remove(activity);
Но здесь есть морщина.В вашем примере кода вы вызываете Attach, чтобы присоединить оба типа сущностей к контексту.Вызов Attach не установит и не восстановит отношения между объектами.Это связано с тем, что для отношений «многие ко многим» в сущности нет FK, чтобы предоставить информацию о том, как она связана с другими сущностями.FK обрабатываются таблицей соединений, которая не отображается в отображении EF «многие ко многим».
Существует несколько подходов к решению этой проблемы.Во-первых, если это возможно и целесообразно для вашей архитектуры, вы можете позволить контексту EF отслеживать сущности с момента их запроса до момента вызова SaveChanges.Таким образом, EF будет отслеживать взаимосвязи для вас, включая отслеживание удалений.
Во-вторых, если сущности должны быть присоединены к новому контексту, вам нужно будет отслеживать взаимосвязи таким образом, чтобыони также могут быть восстановлены.Есть несколько способов восстановить отношения.Одним из способов является построение графа связанных объектов перед вызовом Attach.EF затем пересекает и присоединяет весь граф, включая отношения, когда вызывается Attach.Например:
// Restore the graph
product.Activities.Add(activity1);
product.Activities.Add(activity2);
context.Products.Attach(product);
// Delete the relationship
product.Activities.Remove(activity1);
context.SaveChanges();
(я не использую универсальные методы, которые у вас есть, просто чтобы сделать код немного понятнее. Он должен работать так же, как и с универсальными.)