如何在多对多关系中执行 -disconnected-delete (Entity Framework Code First)

how to perform -disconnected- delete in many-to-many relationships (Entity Framework Code First)

我有以下代码以 断开连接 方式向多对多关系添加记录。我想知道是否可以通过 disconnected 方法实现删除操作。

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

这很适合插入。删除时如何遵循类似的方法?基本上,我不想从数据库中获取任何记录。 我正在寻找不使用 ExecuteStoreCommand 执行 SQL 语句的解决方案。

这根本不可能。在与隐藏联结实体的多对多关联中,您只能使用 independent associations。这是 class 模型中暴露的没有外键 属性 的关联类型: TeamCompetition 之间没有外键。

因此您必须先加载集合,然后才能从集合中删除项目。

如果你真的想避免这种情况,你可以做两件事:

  • 将连接点 class (CompetionTeam) 拉入您的模型。现在您可以为联结创建存根实体,并将它们标记为 Deleted.
  • 创建具有 DbSet<CompetionTeam> 的第二个上下文 class 并使用该上下文直接操作连接点。

后一种选择不太常见,但它完全有效。但是将结点 class 拉入您的模型可能是最好的做法,因为人们迟早会想要存储关于 关于 关联的信息。这只有在 class 是模型的一部分时才有可能。