Definieren einer Entity Framework 1: 1-Zuordnung

.net ado.net entity-framework visual-studio

Frage

Ich versuche, eine 1: 1-Verknüpfung zwischen zwei Entitäten (eine Zuordnung zu einer Tabelle und die andere zu einer Ansicht - mithilfe von DefinedQuery) in einem Entity Framework-Modell zu definieren. Beim Versuch, das Mapping dafür im Designer zu definieren, wähle ich die (1) Tabelle oder Ansicht aus, der die Zuordnung zugeordnet werden soll. Was soll ich wählen? Ich kann eine der beiden Tabellen auswählen, muss dann aber für jedes Ende der Beziehung eine Spalte aus dieser Tabelle (oder Ansicht) auswählen. Ich würde erwarten, eine Spalte aus einer Tabelle für ein Ende der Assoziation und eine Spalte aus der anderen Tabelle für das andere Ende der Assoziation auswählen zu können. Dies ist jedoch nicht möglich.

Hier habe ich beschlossen, die Ansicht "DW_WF_ClaimInfo" zuzuordnen, und es zwingt mich, zwei Spalten aus dieser Ansicht auszuwählen - eine für jedes Ende der Beziehung.

Ich habe auch versucht, das Mapping wie folgt manuell in XML zu definieren:

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

Dies ergibt jedoch: Fehler 2010: Die als Teil dieser MSL angegebene Spalte 'DOCUMENT' ist nicht in MetadataWorkspace vorhanden. Es scheint so, als würde man immer noch erwarten, dass beide Spalten aus derselben Tabelle stammen, was für mich keinen Sinn ergibt.

Wenn ich außerdem für jedes Ende denselben Schlüssel wähle, z. B .:

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

Ich bekomme dann:

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>

Was bekomme ich nicht?

Beliebte Antwort

Sie müssen die Tabelle auswählen, die den Fremdschlüssel enthält. Der nächste Schritt besteht darin, diesen Fremdschlüssel aus der Entität zu entfernen, da er bereits mit der soeben erstellten Beziehung ausgedrückt wird.

Beispiel:

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


table B
-------
B_ID int

In diesem Fall würden Sie die Tabelle A im Designer auswählen, da sie den Fremdschlüssel enthält. Außerdem müssen Sie anschließend B_ID aus der A-Entität entfernen.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum