3

我在与依赖对象组合键级联删除问题复合键的实体主要对象之前没有删除相关对象。具体来说,EF发出的SQL指令试图删除依赖实体之前的主体实体。实体框架 - 当级联删除

我有OnDelete="Cascade"设置在我的EF模型的CSDL和SSDL中,并显式加载依赖实体到内存中,所以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_B的条目被删除时,我删除实体A.

我可以看看到ObjectStateManager,看到加载到内存中A的A_B实体和标为删除,但EF发出SQL命令一个以前删除删除其A_Bs。当依赖实体拥有自己的PK时,这可以很好地工作,但当它是一个Composite Key时,似乎会被绊倒。即使我明确告诉EF的FK关联(SSDL和CSDL),删除应该级联,它并不会先删除子项。

再次,我有一个和它A_Bs都加载到内存中和ObjectStateManager具有所有这些标记将被删除。我在启用代理创建的情况下使用POCO,但我通过LoadProperty调用显式地在内存中加载子实体。

有没有人见过这个?组合键是真正的问题还是只是一种分心?为什么EF在一种情况下按照正确的顺序处理SQL命令,而不是另一种呢?


编辑:我读过两个OnDelete(http://msdn.microsoft.com/en-us/library/cc716734.aspx)和关系管理(http://msdn.microsoft.com/en-us/library/ee373856.aspx)的文档。 “为了识别和非识别关系的思考”题为节似乎暗示着什么,我想这样做是可行的,并且,实际上,预计。它可能是EF提供程序数据库组件中的某些东西吗?我正在使用IBM.Data.DB2程序集处理Informix数据库,而不是针对SQL Server数据库。

进一步更新:我已经更新到IBM DB2 v9.7fp3a和EF提供商贝塔刷新 - http://www.ibm.com/developerworks/forums/thread.jspa?threadID=345634&tstart=0

回答

0

可能有一些误差多数民众赞成由框架吞噬 - 它有时会发生。我认为有一些等同于DB2的Sql Profiler ...我会分析数据库的活动,看看那里发生了什么。如果你根本看不到要删除的电话,至少你已经排除了错误的可能性。