Linq to SQL - 删除子属性

时间:2012-05-26 23:16:59

标签: c# linq-to-sql

我正在尝试删除域实体的子属性。在用户界面中,用户选择“删除”以从CustomVariableGroup实体中删除Application

我想从LINQ-to-SQL实体中删除该属性&然后提交更改,将导致LINQ-to-SQL负责数据库端的工作。但该行永远不会从表中删除。当我在我的应用程序中刷新页面时,该属性仍然存在,因为它仍然存在于数据库中。

public void Save(Application application)
{
    ApplicationRecord appRecord = application.Map();  // Maps domain entity to L2S entity

    // Before this line executes, appRecord has 0 CustomVariableGroups, which is correct.
    this.Database.ApplicationRecords.Attach(appRecord, true);
    // After the attach, appRecord now has 1 CustomVariableGroup again. This is wrong.

    appRecord = application.Map();  // Hack to remove the CustomVariableGroup again.

    // This doesn't delete the CustomVariableGroup from appRecord. Do I need
    // to delete it explicitly? Or should removing it from appRecord, and
    // calling SubmitChanges() do it?
    this.Database.SubmitChanges();
}

在实体上摆脱这个子属性的正确方法是什么?我想我可以遍历列表并单独删除每个项目,但我不认为LINQ-to-SQL应该以这种方式工作。

任何想法都表示赞赏。

注意:属性ApplicationCustomVariableGroupRecords表示解析数据库中many-to-many关联的表。 Application可以有一个或多个CustomVariableGroups,而CustomVariableGroup可以属于一个或多个Applications

2 个答案:

答案 0 :(得分:2)

通常你必须专门删除对象 - 从父集合中删除它只是意味着你不希望它再与那个特定的父对象相关联。它无法告诉您不希望将其与其他父级关联。如果要删除它,则需要拨打电话将其删除(L2S,IIRC的DeleteOnSubmit)

答案 1 :(得分:1)

如果我没有错,那些在它们之间有n到n关系的表就像嵌套一样工作。所以试着先从第3个表中删除(包含2个表的ID),然后从主表中删除..

[抱歉,我在页面上看不到添加评论按钮..所以我把这个想法写成了答案]