2016-04-10 7 views
2

Ich frage mich, wie Self-Join in EntityDataSource zu behandeln.Wie behandelt man Self-Join in EntityDataSource?

IF Ich habe ich so abfragen:

SELECT b.degree_name ,c.degree_name as degree_next 
FROM EMPDEGPROM a INNER JOIN DEGREEWORK b 
ON a.degree_code=b.degree_code 
INNER JOIN DEGREEWORK c 
ON a.next_degree_code =c.degree_code 
WHERE a.emp_num=6777 

Wie diese Datenquelle als EntityDataSource verwenden.?

Ich versuche, dies zu tun, aber ich kann nicht degree_next

<asp:EntityDataSource ID="EmpPromotionsDS" runat="server" 
      ConnectionString="name=CTX" DefaultContainerName="CTX" EnableFlattening="False" 
      EntitySetName="EMPDEGPROMs" EntityTypeFilter="EMPDEGPROM" Where="it.EMP_NUM [email protected]_num" Include="DEGREEWORK" > 
      <WhereParameters> 
       <asp:SessionParameter Name="emp_num" SessionField="emp_num" DbType="Int32" /> 
      </WhereParameters> 

Antwort

2

eine Ansicht erstellen.

CREATE VIEW XXX AS 
SELECT a.emp_num, b.degree_name ,c.degree_name as degree_next 
FROM EMPDEGPROM a INNER JOIN DEGREEWORK b 
ON a.degree_code=b.degree_code 
INNER JOIN DEGREEWORK c 
ON a.next_degree_code =c.degree_code 

EF hat kein Problem beim Lesen von Ansichten.

+0

Vielen Dank, gerade nachdem ich die Ansicht erstellt habe, wie Sie gesagt haben, muss ich Primärschlüssel hinzufügen, um diese Ansicht zu verwenden 'alter view XXX add constraint vemp_pk Primärschlüssel (emp_num, Grad_code) disable1' –

1
  • bekommen Wenn Sie nur Nur-Lese wollen, könnten Sie die EntitySetName, EntityTypeFilter fallen, Wo und Include Eigenschaften und stattdessen die CommandText verwenden verwenden Eigentum.

  • Wenn Sie Ihre Entitäten direkt verwenden möchten, stellen Sie sicher, dass Sie über eine Navigationseigenschaft mit einer Selbstreferenz verfügen, und präzisieren Sie sie in Ihrer Include-Eigenschaft.

<asp:EntityDataSource ID="EmpPromotionsDS" runat="server" 
 
      ConnectionString="name=CTX" 
 
      DefaultContainerName="CTX" 
 
      EnableFlattening="False" 
 
      CommandText= SELECT b.degree_name ,c.degree_name as degree_next 
 
         FROM EMPDEGPROM a INNER JOIN DEGREEWORK b 
 
         ON a.degree_code=b.degree_code 
 
         INNER JOIN DEGREEWORK c 
 
         ON a.next_degree_code =c.degree_code 
 
         WHERE [email protected]> 
 
<CommandParameters> 
 
    <asp:ControlParameter Name="EmployeeId" ControlID="EmployeeIdTextBox" Type="Int32"/> 
 
</CommandParameters>

+0

freundlicherweise, Könnten Sie die Entity-Datenquelle in Ihrer Antwort ändern, so dass ich bekommen könnte, was Sie meinen –

+0

Ich möchte LINQ nicht TSQL verwenden, sollte der Entwickler keine Ahnung über DB Struktur haben. –

Verwandte Themen