1

我正在尝试删除域实体的子属性。在 UI 中,用户选择 Delete 以CustomVariableGroupApplication实体中删除 a。

我认为从 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

4

2 回答 2

2

通常,您必须专门删除该对象 - 从父集合中删除它只是意味着您不希望它再与该特定父项关联。它不能告诉您不想将其与不同的父级关联。如果您希望它被删除,您需要拨打电话将其删除(DeleteOnSubmit for L2S, IIRC)

于 2012-05-27T05:14:10.887 回答
1

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

[对不起,我在页面上看不到添加评论按钮..所以我写了这个想法作为答案]

于 2012-05-27T01:46:34.170 回答