【问题标题】:EntityFramework - Delete Many to Many relationshipEntityFramework - 删除多对多关系
【发布时间】:2012-09-10 20:35:55
【问题描述】:

我有以下实体树:

ParameterDefinition-->ParameterOperation
ParameterDefinition-->ParameterGroup-->Parameter

ParameterOperationParameter 之间还存在多对多关系(映射到 FK-FK 表)。 所有关联都声明为删除级联(只有多对多不是删除级联)。 问题是当我MarkAsDeleted Parameter 对象通过ParameterOperationParameterDefinition.ParameterOperations[0].Parameters[0].MarkAsDeleted)它从数据库中删除并且映射表也被更新(行被删除),但是当我尝试从ParameterGroup删除Parameter (ParameterDefinition.ParameterGroups[0].Parameters[0].MarkAsDeleted) 它根本没有被删除(没有在数据库上执行删除查询)。 可能是什么问题?

另外我如何删除多对多关系?例如我想保留所有参数和所有ParameterOperations,但我想删除Parameters[0]ParameterOperations[0]之间的关系。

我该怎么做?

如果我设置 NavigationProperty - ParameterDefinition.ParameterOperations[0].Parameters.MarkAsDeleted 它实际上从数据库中删除了我不想要的参数

【问题讨论】:

    标签: entity-framework entity


    【解决方案1】:

    只需从ParameterOperation's 集合中删除Parameter 实体,然后保存您的上下文就足以删除联结表中存在的多对多关系。

    ParameterDefinition.ParameterOperations[0].Parameters.Remove(ParameterDefinition.ParameterOperations[0].Parameters[0]);
    Context.SaveChanges();
    

    【讨论】:

    • 正确,但它也会从参数表中删除参数。同样,当我尝试从 ParameterGroups 中删除参数时,它甚至不会在数据库上执行删除查询。我在 ChangeTracker 中查找已更改的实体,但没有任何内容
    • 您是要实际删除参数,还是删除关系?您是否注意到我实际上并没有删除参数(不使用 MarkAsDeleted),而只是从多对多集合中删除它?当您想从 ParameterGroup 中删除参数时,您可以发布更多代码吗?你在哪里调用 SaveChanges? ParameterGroup 是否已附加到上下文?
    • 我正在尝试仅删除关系-不会以这种方式删除。当我试图从 ParameterGroup 中删除时,我只是这样做 - ParameterDefinition.ParameterGroups[0].Parameters[0].MarkAsDeleted。我如何检查它是否附加到上下文?在删除 Parameter 之前,我首先加载 ParameterDefinition 及其所有导航
    • 知道可能是什么问题吗?
    • 老实说,不是我们拥有的信息.. 一切都应该正常工作。您能否发布您从上下文中获取实体、进行更新然后保存上下文的整个方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多