我有以下情况:
首先是唯一相关的表/类(所有从DB(MySQL)自动生成):
edmx文件的相关部分:
<Association Name="navigationitem_ibfk_1">
<End Role="navigationitem" Type="Model.Store.navigationitem" Multiplicity="0..1">
<OnDelete Action="Cascade" />
</End>
<End Role="navigationitem1" Type="Model.Store.navigationitem" Multiplicity="*" />
<ReferentialConstraint>
<Principal Role="navigationitem">
<PropertyRef Name="id" />
</Principal>
<Dependent Role="navigationitem1">
<PropertyRef Name="navigationitemid" />
</Dependent>
</ReferentialConstraint>
</Association>
我认为不需要更多的单词:它是一个导航表,每个导航项目都可以有孩子(但这不是必须的)。
现在,当我尝试删除包含子项的顶级项目时:
context.Remove(topLevelNode);
context.SaveChanges();
它会删除数据库中的顶级节点,但在子节点上它只是将navigationitemid
设置为null
(是的 - 当我删除时,我在数据库中的删除级联上定义了它直接在那里工作)。
所以我认为它正在发生的是,当我删除父节点时,框架将所有子节点的所有navigationitemid
设置为NULL
,然后当导航应保存到数据库时不会级联删除,因为子项的navigationitemid
为NULL
。
我该怎么办?谢谢。
答案 0 :(得分:1)
人们想要做的显而易见的事情是在上下文中定义关联上的级联删除。但尝试它我发现sql server不支持它或EF需要帮助:
在表'yyy'上引入FOREIGN KEY约束'xxx'可能会导致循环或多个级联路径。 (See here.)
特别是在删除navigationitem
s的树时,这不是一个非常有吸引力的选项,但我担心这是你现在所拥有的全部内容。