Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架——级联删除复合键实体时,未在主体对象之前删除依赖对象_Entity Framework_Entity Framework 4_Foreign Key Relationship_Composite Key_Edmx - Fatal编程技术网

Entity framework 实体框架——级联删除复合键实体时,未在主体对象之前删除依赖对象

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

我对使用组合键的依赖对象的级联删除有问题。具体地说,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在删除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等效的东西……我将分析数据库的活动,并查看那里发生了什么。如果您根本看不到删除的调用,至少您已经消除了一种可能的错误