Définir une association Entity Framework 1: 1

.net ado.net entity-framework visual-studio

Question

J'essaie de définir une association 1: 1 entre deux entités (l'une mappée sur une table et l'autre sur une vue - à l'aide de DefinedQuery) dans un modèle Entity Framework. Lorsque je tente de définir le mappage correspondant dans le concepteur, cela me fait choisir la table (1) ou la vue à laquelle mapper l'association. Qu'est-ce que je suis supposé choisir? Je peux choisir l'une ou l'autre des deux tables, mais je suis obligé de choisir une colonne de cette table (ou de cette vue) pour chaque extrémité de la relation. Je m'attendrais à pouvoir choisir une colonne d'une table pour une extrémité de l'association et une colonne de l'autre table pour l'autre extrémité de l'association, mais il n'y a aucun moyen de le faire.

Ici, j'ai choisi de mapper vers la vue "DW_WF_ClaimInfo" et cela me force à choisir deux colonnes dans cette vue, une pour chaque extrémité de la relation.

J'ai également essayé de définir le mappage manuellement dans le fichier XML comme suit:

<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>

Mais cela donne: Erreur 2010: la colonne 'DOCUMENT' spécifiée dans le cadre de ce MSL n'existe pas dans MetadataWorkspace. On dirait que l'on s'attend toujours à ce que les deux colonnes proviennent de la même table, ce qui n'a aucun sens pour moi.

De plus, si je sélectionne la même clé pour chaque extrémité, par exemple:

<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>

Je reçois alors:

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>

Qu'est-ce que je ne reçois pas?

Réponse populaire

Vous devez sélectionner la table, qui contient la clé étrangère. L'étape suivante consiste à supprimer cette clé étrangère de l'entité, telle qu'elle est déjà exprimée à l'aide de la relation que vous venez de créer.

Exemple:

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


table B
-------
B_ID int

Dans ce cas, vous sélectionneriez la table A dans le concepteur, car elle contient la clé étrangère. En outre, vous devrez ensuite supprimer B_ID de l'entité A.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow