gpt4 book ai didi

entity-framework - Entity Framework ——级联删除复合键实体时,从属对象未在主体对象之前删除

转载 作者:行者123 更新时间:2023-12-04 07:23:11 24 4
gpt4 key购买 nike

我在使用复合键级联删除相关对象时遇到问题。具体来说,EF 发出的 SQL 指令会尝试在删除依赖实体之前删除主要实体。

我在我的 EF 模型的 CSDL 和 SSDL 中都设置了 OnDelete="Cascade",并显式地将相关实体加载到内存中,以便 EF 知道如何处理它们。我有这个与另一个 FK 关系正常工作,并且 EF 在删除原则之前正确删除了子实体。

但是,在这种情况下并非如此,我怀疑这是因为从属实体具有复合键。模式概览:

Entity A              Entity B                 Entity A_B
ID (PK) ID (PK) A_ID (PK, FK to A)
B_ID (PK, FK to B)

我希望在删除实体 A 时删除实体 A_B 的条目。

我可以查看 ObjectStateManager 并看到 A 的 A_B 实体已加载到内存中并标记为删除,但 EF 发出 SQL 命令以在删除其 A_B 之前删除 A。当依赖实体有自己的 PK 时,这很好用,但当它是复合键时似乎会出错。它不会先删除 child ,即使我明确告诉 EF 的 FK 协会(SSDL 和 CSDL)应该级联删除。

同样,我将 A 及其 A_B 加载到内存中,并且 ObjectStateManager 将它们全部标记为要删除。我正在使用启用了代理创建的 POCO,尽管我通过对上下文的 LoadProperty 调用显式地将子实体加载到内存中。

有人看过吗?复合键真的是问题还是只是分散注意力?为什么 EF 在一种情况下以正确的顺序处理 SQL 命令,而在另一种情况下却没有?


编辑: 我已经阅读了 OnDelete ( http://msdn.microsoft.com/en-us/library/cc716734.aspx ) 和 Relationship Management ( http://msdn.microsoft.com/en-us/library/ee373856.aspx ) 的文档。标题为“识别和非识别关系的注意事项”的部分似乎暗示我想做的事情是可能的,而且确实是预期的。它可能是数据库的 EF 提供程序程序集中的东西吗?我正在使用 IBM.Data.DB2 程序集处理 Informix 数据库,而不是处理 SQL Server 数据库。

(进一步更新:我已经更新到 IBM DB2 v9.7fp3a 和 EF Providers Beta Refresh -- http://www.ibm.com/developerworks/forums/thread.jspa?threadID=345634&tstart=0)

最佳答案

框架可能会吞下一些错误 - 有时会发生。我假设有一些等效于 DB2 的 Sql Profiler 的东西......我会分析数据库的事件并查看那里发生了什么。如果您根本看不到 delete 调用,至少您已经排除了一种可能的错误。

关于entity-framework - Entity Framework ——级联删除复合键实体时,从属对象未在主体对象之前删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4261104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com