代码之家  ›  专栏  ›  技术社区  ›  Jake

LINQ到SQL和多对多关系删除

  •  5
  • Jake  · 技术社区  · 15 年前

    ID Friend Food
    1 'Tom' 'Pizza'
    

    现在假设我有一个 Friend tom

    FriendsFoods ff = tom.FriendsFoods.Where(x => x.Food.Name == 'Pizza').Single();
    tom.FriendsFoods.Remove(ff);
    pizza.FriendsFoods.Remove(ff);
    

    SubmitChanges() 在DataContext上,我得到了一个异常,因为它试图在 Friend Food 中的列 FriendsFoods 桌子。

    我确信我可以把一些复杂的逻辑组合起来,来跟踪 朋友们 提交更改() 调用等来尝试以我想要的方式工作,但是有没有一种好的、干净的方法来删除与linqtosql的多对多关系?

    3 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    8 年前

    假设数据库本身 CASCADE DELETE 在外键上定义的规则(否则会有麻烦),您需要设置 删除规则 在Linq to SQL设计器(或 DeleteRule AssociationAttribute )至 CASCADE .

    tom pizza

    @Crispy 同样正确的是 真实的 DeleteOnNull 子关联中的属性。 层叠 父-子关联的设置,以及(b)外键字段是否可为空。如果有一个不可为null的FK 层叠删除 在linqtosql设计器中,应该自动设置 DeleteOnNull = true 然后从映射表中删除记录,而不是尝试将其关联设置为 NULL .

        2
  •  3
  •   Community CDub    8 年前

    FriendFoods )通过将其从linq实体的子集合中移除,您需要设置 DeleteOnNull

    看到了吗 How do I delete records from a child collection in LINQ to SQL?

        3
  •  2
  •   Jason    15 年前

    级联删除不适用于此处。它只适用于实体被删除的情况,无论是朋友对象还是食物对象,但如果您只是想删除关系,则不适用。 您不直接访问关系表有什么原因吗?我认为这将是一个更干净的解决方案。