我有以下代码,用于以断开连接的方式将记录添加到多对多关系。我想知道是否可以通过断开方法实现删除操作。
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语句。
答案 0 :(得分:1)
这根本不可能。在与隐藏联结实体的多对多关联中,您只能使用independent associations。这是在类模型中没有公开外键属性的关联类型:Team
和Competition
之间没有外键。
所以你必须先加载一个集合,然后才能删除它。
如果你真的想避免这种情况,你可以做两件事:
CompetionTeam
)拉入模型。现在,您可以为联结创建存根实体,并将其标记为Deleted
。DbSet<CompetionTeam>
的上下文类,并使用该上下文直接操作联结。后一种选择是不太常见的事情,但它完全有效。但是将联结类放入模型中可能是最好的做法,因为通常,人们迟早会想要存储关于关联的信息。只有当类是模型的一部分时才可以这样做。