Entity framework 实体框架——级联删除复合键实体时,未在主体对象之前删除依赖对象
我对使用组合键的依赖对象的级联删除有问题。具体地说,EF发出的SQL指令尝试在依赖实体之前删除主体实体 我在EF模型的CSDL和SSDL中都设置了Entity framework 实体框架——级联删除复合键实体时,未在主体对象之前删除依赖对象,entity-framework,entity-framework-4,foreign-key-relationship,composite-key,edmx,Entity Framework,Entity Framework 4,Foreign Key Relationship,Composite Key,Edmx,我对使用组合键的依赖对象的级联删除有问题。具体地说,EF发出的SQL指令尝试在依赖实体之前删除主体实体 我在EF模型的CSDL和SSDL中都设置了OnDelete=“Cascade”,并且正在显式地将依赖实体加载到内存中,以便EF知道如何处理它们。我让它与另一个FK关系正常工作,EF在删除原则之前正确删除子实体 但是,在本例中不是这样,我怀疑这是因为依赖实体有一个复合密钥。简要介绍模式: Entity A Entity B Entity
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在删除A_B之前发出一个SQL命令来删除A。当依赖实体有自己的PK时,这可以很好地工作,但当它是一个复合键时,似乎会出错。即使我明确告诉EF的FK关联(SSDL和CSDL)应该级联删除,它也不会首先删除子项
同样,我将A和它的A_B都加载到内存中,ObjectStateManager将它们都标记为删除。我正在使用启用代理创建的POCOs,尽管我通过对上下文的LoadProperty调用显式地在内存中加载子实体
有人见过这个吗?复合键真的是问题所在还是只是分散注意力?为什么EF在一种情况下以正确的顺序处理SQL命令,而在另一种情况下却没有
编辑:我已经阅读了OnDelete()和关系管理()的文档。题为“识别和非识别关系的注意事项”的部分似乎暗示我想要做的是可能的,而且确实是预期的。它可能是数据库的EF提供者程序集中的某个东西吗?我使用IBM.Data.DB2程序集处理Informix数据库,而不是SQL Server数据库
(进一步更新:我已经更新到IBM DB2 v9.7fp3a和EF Providers Beta Refresh——)可能会有一些错误被框架吞没-有时会发生。我假设有一些与Sql Profiler for DB2等效的东西……我将分析数据库的活动,并查看那里发生了什么。如果您根本看不到删除的调用,至少您已经消除了一种可能的错误