如何在多对多关系中执行-disconnected- delete(实体框架代码优先)

时间:2015-10-30 14:09:07

标签: entity-framework ef-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();
      };

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

1 个答案:

答案 0 :(得分:1)

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

所以你必须先加载一个集合,然后才能删除它。

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

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

后一种选择是不太常见的事情,但它完全有效。但是将联结类放入模型中可能是最好的做法,因为通常,人们迟早会想要存储关于关联的信息。只有当类是模型的一部分时才可以这样做。