Как выполнить -disconnected- удалить в отношениях многие ко многим (Entity Framework Code First)

У меня есть следующий код для добавления записи в отношение "многие ко многим" отключенным способом. Интересно, возможно ли выполнить операцию удаления с отключенным подходом?

      using (var db = new FMyDbContext())
      {
            int selectedTeamId = Convert.ToInt32(lst_AllTeams.SelectedValue);
            Team myTeam = new Team() { TeamId = selectedTeamId };

            int selectedCompId = Convert.ToInt32(grd_Competitions.SelectedValue.ToString());
            Competition myComp = new Competition() { CompetitionId = selectedCompId };

            myComp.ParticipatingTeams = new List<Team>() { myTeam };

            db.Entry(myComp).State = System.Data.Entity.EntityState.Unchanged;

            db.Entry(myTeam).State = System.Data.Entity.EntityState.Unchanged;

            db.SaveChanges();
      };

Это хорошо работает для вставки. Как я могу использовать аналогичный подход при удалении? По сути, я не хочу получать какие-либо записи из базы данных. Я ищу решение без выполнения оператора SQL с ExecuteStoreCommand.

1 ответ

Решение

Это просто невозможно. В ассоциациях "многие ко многим" со скрытой сущностью соединения вы можете работать только с независимыми ассоциациями. Это тип ассоциации без свойства внешнего ключа, представленного в модели класса: между внешним ключом нет Team а также Competition,

Таким образом, вы должны загрузить коллекцию перед удалением элементов из нее.

Если вы действительно хотите избежать этого, вы можете сделать две вещи:

  • Вытащите класс соединения (CompetionTeam) в вашу модель. Теперь вы можете создавать объекты-заглушки для соединений и помечать их как Deleted,
  • Создайте второй класс контекста, который имеет DbSet<CompetionTeam> и использовать этот контекст для непосредственного управления соединениями.

Последний вариант менее распространен, но он вполне допустим. Но включение класса соединения в вашу модель, вероятно, лучше всего сделать, потому что часто люди рано или поздно захотят сохранить информацию об ассоциации. Это возможно только тогда, когда класс является частью модели.

Другие вопросы по тегам