Colonne di due tabelle di database correlate in un GridView ASP.NET con EntityDataSource

Ho due tabelle di SQL Server con Primary Key (PK) e una chiave esterna (FK) che collega le due tabelle:

1) Table "Order" OrderID, int, PK AddressID, int, FK ... 2) Table "Address" AddressID, int, PK City, nvarchar(50) ... 

Quindi ho creato un modello di dati di quadro (ADO.NET) fuori da queste due tabelle. Ora sulla mia pagina Web (ASP.NET) ho inserito un GridView con EntityDataSource. Nel mio GridView voglio mostrare due colonne:

  • ID ordine
  • Città (appartenente a quell’ordine e collegata tramite il tasto ID Address)

Come lo posso fare? Il mio problema è: quando configuro la Sorgente dati quadro posso selezionare un “EntitySetName” che può essere “Ordine” o “Indirizzo” ma non entrambi, né posso selezionare alcun tipo di relazione. Se seleziono “Ordina” come EntitySetName, in GridView posso aggiungere le colonne

  • ID ordine
  • Indirizzo
  • Address.AddressID

Aggiungendo la colonna “Indirizzo” vengono visualizzate le celle vuote. Aggiungendo “OrderID” e “Address.AddressID” vengono visualizzati gli ID previsti. Ma come posso aggiungere la “Città” del relativo indirizzo al mio GridView?

Grazie per l’aiuto in anticipo!

Modifica: chiarimento:

Entity Framework ha creato una class “Ordine” e una class “Indirizzo” corrispondente alle tabelle del database. La class “Ordine” ha un riferimento a un object “Indirizzo” come proprietà di navigazione, corrispondente alla relazione 1-n tra la tabella Indirizzo e Ordine.

Fondamentalmente voglio avere una colonna nel mio GridView che visualizza Order.Address.City. Ho provato ad aggiungere un campo associato a “Address.City” come campo dati al GridView ma si traduce in un errore di runtime (“nessuna proprietà di questo tipo …”).

OK, troppe ore dopo ho trovato la soluzione da sola:

Opzione 1:

È ansible utilizzare la proprietà select in EntityDataSource che consente di creare proiezioni arbitrarie di dati da diverse quadro correlate / tabelle di database (nel mio caso: ID ordine dall’ quadro Ordine e Città dall’entity framework Indirizzo)

Svantaggio: l’utilizzo di select in EntityDataSource rende imansible l’uso di Insert, Update e Delete in GridView!

Opzione 2:

EntityDataSource deve avere la proprietà include per includere la relativa proprietà dell’indirizzo insieme agli ordini interrogati. Il markup sembra piace questo:

   

Quindi la raccolta di colonne di GridView può avere un campo modello come questo:

       

Qui Eval è importante. Bind non funziona. Anche usando un BoundField come colonna …

  

NON è ansible. Quindi non è ansible in GridView modificare la città (il che ha senso perché è un campo correlato che appartiene ad un’altra tabella e forse a molti altri ordini). Ma è ansible modificare i campi piatti dell’ quadro dell’ordine e anche il “AddressID” dell’ordine per assegnare un altro indirizzo.