Entity Framework: aggiungi manualmente la proprietà di navigazione


115

Ho generato un Entity Framework Model (4.0) dal mio database. Non ho progettato il database e non ho alcun controllo sullo schema, ma ci sono alcune tabelle che non hanno vincoli di chiave esterna definiti, ma è definita una relazione implicita.

Per esempio:

Ho una tabella chiamata Persone che ha le seguenti colonne: GenderID RaceID

Ci sono tabelle sia per Gender che per Race ma non c'è una chiave esterna nella tabella People.

Quando ho importato il modello, non sono state aggiunte proprietà di navigazione per queste relazioni. Ho provato ad aggiungerlo manualmente ma Da ruolo e A ruolo sono disabilitati. Non sono sicuro di come aggiungere la relazione da solo. Come faccio a fare questo?

Risposte:


181

Sì, non è così semplice.

Ecco cosa fai:

1 - Fare clic con il pulsante destro del mouse sul designer, Aggiungi -> Associazione

2 - Imposta l'associazione e le cardinalità (Persone * .. 1 Genere, Persone * .. 1 Razza)

3 - Vai nel browser del modello -> Associazioni

4 - Fare clic con il pulsante destro del mouse sulle associazioni appena create, fare clic su Proprietà

5 - Qui è necessario impostare gli endpoint per le opzioni chiave e cascata. Assicurati di ottenere gli endpoint corretti. Puoi anche impostare un vincolo referenziale qui per la tua proprietà di navigazione implicita.

6 - Mappare la proprietà di navigazione alle tabelle / campi pertinenti.

7 - Convalida il tuo modello, incrocia le dita.

Spero che questo ti aiuti.


20
+1 per aver salvato ciò che resta dei miei capelli. Aggiungerò # 6 richiede la modifica della colonna della chiave esterna nella pagina delle proprietà dell'associazione, impostazione Vincolo referenziale. Premi il [...] per aprire la finestra di dialogo del vincolo referenziale e modifica il campo fittizio che il designer ha inserito nella tabella figlia sotto Proprietà dipendente.
Joel Brown

8
Dovrai anche andare alle proprietà della tabella figlia ed eliminare il campo fittizio aggiunto dal designer (e che non è mappato a nessun campo reale nella tabella figlia).
Joel Brown

2
In caso di visualizzazione, assicurati anche di ottenere la definizione della chiave primaria corretta (fai clic con il pulsante destro del mouse seleziona i campi correlati, contrassegnali come EntityKey nelle proprietà). Altrimenti potresti ottenere "La molteplicità non è valida nel ruolo nella relazione perché il ruolo dipendente si riferisce alle proprietà chiave ..."
Mikl X

1
Sul # 2, potresti voler assicurarti di deselezionare la casella di controllo "Aggiungi proprietà di chiave esterna all'entità". Ciò crea alcuni mal di testa inutili se davvero non ne hai bisogno.
Crittografia

Dopo aver aggiornato nuovamente il modello dal database, le entità con scaffold manterranno l'associazione aggiunta manualmente?
voodoo_patch

45

Mi sono imbattuto in questo post del blog che propone la seguente soluzione, che ha funzionato benissimo per me (purtroppo non sono riuscito a far funzionare gli RPM1984 nella mia situazione).

  1. Aggiungi un'associazione tramite lo sfondo del designer facendo clic con il pulsante destro del mouse sul menu contestuale
  2. Configura la tua associazione (assicurati di deselezionare la creazione della chiave esterna)
  3. Fare clic con il tasto destro sull'associazione e scegliere Proprietà
  4. Fare clic sul ...pulsante per Vincolo referenziale
  5. Imposta la relazione tra le chiavi all'interno
  6. Verifica (dal menu contestuale del designer)
  7. ???
  8. Profitto!

4
+1 Il punto 4 mi ha fatto fare bene, trascurato con la risposta RPM194.
Hugo Logmans
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.