定義實體框架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。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因