定义实体框架1:1关联

.net ado.net entity-framework visual-studio

我正在尝试在实体框架模型中定义两个实体之间的1:1关联(一个映射到表,另一个映射到视图 - 使用DefinedQuery)。在设计器中尝试为此定义映射时,它会让我选择(1)表或视图来将关联映射到。我应该选择什么?我可以选择这两个表中的任何一个,但后来我被迫从该表(或视图)中为每个关系结束选择一列。我希望能够从一个表中选择一个列作为关联的一端,另一个表中的列作为关联的另一端,但是没有办法做到这一点。

在这里,我选择映射到“DW_ WF_ClaimInfo”视图,它迫使我从该视图中选择两列 - 一个用于关系的每一端。

我也尝试在XML中手动定义映射,如下所示:

<AssociationSetMapping Name="Entity1Entity2" TypeName="ClaimsModel.Entity1Entity2"
     StoreEntitySet="Entity1">
  <EndProperty Name="Entity2">
    <ScalarProperty Name="DOCUMENT" ColumnName="DOCUMENT" />
  </EndProperty>
  <EndProperty Name="Entity1">
    <ScalarProperty Name="PK_DocumentId" ColumnName="PK_DocumentId" />
  </EndProperty>
</AssociationSetMapping>

但是这给出了:错误2010:在MetadataWorkspace中不存在作为此MSL的一部分指定的列'DOCUMENT'。看起来它仍然希望两列都来自同一个表,这对我来说没有意义。

此外,如果我为每一端选择相同的密钥,例如:

<AssociationSetMapping Name="Entity1Entity2" TypeName="ClaimsModel.Entity1Entity2"
     StoreEntitySet="Entity1">
  <EndProperty Name="Entity2">
    <ScalarProperty Name="DOCUMENT" ColumnName="PK_DocumentId" />
  </EndProperty>
  <EndProperty Name="Entity1">
    <ScalarProperty Name="PK_DocumentId" ColumnName="PK_DocumentId" />
  </EndProperty>
</AssociationSetMapping>

然后我得到:

Error 3021: Problem in Mapping Fragment starting at line 675: Each of the following
columns in table AssignedClaims is mapped to multiple conceptual side properties:
  AssignedClaims.PK_DocumentId is mapped to
    <AssignedClaimDW_WF_ClaimInfo.DW_WF_ClaimInfo.DOCUMENT,
    AssignedClaimDW_WF_ClaimInfo.AssignedClaim.PK_DocumentId>

我得不到什么?

热门答案

您必须选择包含外键的表。下一步是从实体中删除该外键,因为它已使用您刚创建的关系表示。

例:

table A
-------
A_ID int
B_ID int


table B
-------
B_ID int

在这种情况下,您将在设计器中选择表A,因为它包含外键。此外,您还需要从A实体中删除B_ID。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因