2009-02-23 5 views
7

Questo sembra un caso comune, ma per qualche ragione, sono ostacolato dal debole editor di EF.Come posso aggiungere manualmente un'associazione composta nell'entità framework?

ho due tabelle, in questo modo:

Table1 
(
Column1 int, PK 
Column2 int, PK 
) 

Table2 
(
Column1 int, PK, FK 
Column2 int, PK, FK 
Column3 int, PK 
) 

Ora, il database (fuori del nostro controllo) non ha vincoli di chiave esterna. In questo esempio, si suppone che Table2 abbia un vincolo di chiave esterna che fa riferimento a Table1 su (Column1, Column2). In altre parole, le prime due colonne di Table2 fanno riferimento alla chiave primaria di Table1. Questo è un problema quotidiano in qualsiasi database ordinario.

In altri framework, come LLBLGenPro, è possibile aggiungere manualmente la relazione in modo molto banale. Tuttavia, non riusciamo a capire come ottenere questo risultato nel redattore di EF. Questa finestra "Dettagli mappatura" è orribile e non intuitiva. Finora, siamo riusciti a selezionare le varie tabelle nella mappatura, ma sembra sempre voler associare su tutte le colonne.

Qualche idea o riferimento?

+0

Hai mai trovato una risposta a questo? Sono nella stessa situazione e la soluzione di Craig ci vorrebbe per sempre e in effetti ci impedirebbe di usare EF. – Vaccano

risposta

1
  1. Creare tabelle "temporanee" con le stesse colonne ma FK appropriati. Utilizzare un backup del DB se non è possibile modificare quello "reale". Non preoccuparti di mappare le tabelle senza FK. Potrebbe essere più semplice se si utilizza un nuovo modello, poiché l'eliminazione nel progettista non rimuove i mapping del negozio.
  2. Mappali con il wizard.
  3. Aprire l'EDMX come XML (non nella finestra di progettazione)
  4. ricerca e sostituire i nomi delle tabelle, utilizzando le tabelle si davvero desidera mappare.
  5. Eliminare le tabelle "temporanee".

Consiglio generale: modificare manualmente EDMX quando si eseguono operazioni non standard. Nessun FK = non standard. Il progettista della GUI gestisce solo alcuni casi.

+1

Grazie per la risposta. Questo suona estremamente zoppo.Non è solo lo scenario FK a rovinarlo. Esistono altre istanze di associazioni personalizzate che le persone desiderano aggiungere ai livelli ORM. Questo non sembra buono per EF. –

+0

È quello che è, ma la maggior parte degli ORM richiede l'editing XML ad un certo punto, secondo la mia esperienza. –

7

Supponendo di avere le due entità in posizione.

  1. Fare clic con il pulsante destro del mouse sull'intestazione dell'entità Tabella1 e selezionare Aggiungi associazione.
  2. Selezionare Tabella2 dall'estremità destra. (Impostare qualsiasi altra proprietà in questa procedura guidata)
  3. Selezionare l'associazione appena creata e modificare la mappatura. (Dovrebbe essere già selezionato)
  4. Nella finestra Mapping Dettagli, selezionare Table2

che dovrebbe essere esso.

0
  1. Fare clic con il pulsante destro del mouse sull'intestazione dell'entità Tabella1 e selezionare Aggiungi associazione.
  2. Selezionare Tabella2 dall'estremità destra. (Impostare tutte le altre proprietà in questa procedura guidata)
  3. Doubleclick l'associazione appena creato e impostare le proprietà