20

Ho un modello generato da db con Entity Framework. Quando ho qualche modifica nel database, aggiorno il modello dal database per ottenere la modifica del modello. Ma questo aggiornamento è applicato a tutte le entità (tabelle) incluse nel modello.Come aggiornare solo una tabella per il modello dal database con Entity Framework?

Ora aggiungo una nuova colonna in una tabella Tab1. Non voglio aggiornare il modello dal database come alcune altre modifiche che non voglio includere nel modello. Posso aggiungere manualmente la nuova proprietà nel modello per l'entità Tab1. quindi ha causato un errore di mappatura.

Quindi ho bisogno di aggiornare Model.Store per la tabella per includere la nuova colonna. Significa che voglio aggiornare il modello solo per Tab1.

Come posso fare questo?

risposta

39

Il file EDMX è un file XML che è una combinazione di 3 parti diverse che costituiscono il tutto. Se si fa clic sul file EDMX e scegli "Apri con ... XML Editor" vedrete le 3 sezioni differenti:

  • <edmx:ConceptualModels>
  • <edmx:StorageModels>
  • <edmx:Mappings>

Queste sezioni possono essere modificate manualmente, a tuo rischio e pericolo! :-)
In questo modo è possibile modificare solo ciò che è necessario.

Si noti che è anche possibile generare file MSL CSDL, SSDL & anziché incorporarli nel file binario, modificando la proprietà "Meta Artifact Processing" del proprio modello su "Copia nella directory di output".

Se non si vuole fare questo manualmente, c'è il Huagati DBML/EDMX tool, è gratuito e si può scaricare da huagati official site o da visual studio gallery, che è una Studio plug-visiva che consente di selezionare quali cambiamenti devono essere fatte .

+0

grazie. Lo faccio manualmente Quindi non c'è modo di farlo automaticamente come "aggiornamento dal database" per singolo oggetto. – KentZhou

+2

L'unico modo che conosco è usare questo: [strumento Huagati DBML/EDMX] (http://www.huagati.com/dbmltools/). A proposito, non sono il tipo che l'ha fatto!;-) – MaxSC

+0

E non dimenticare di upvotare e/o accettare la risposta se ritieni che sia stato utile! Grazie ;-) – MaxSC

-14

C'è modo di farlo automaticamente.

fare clic con il pulsante destro del mouse sul file edmx> aggiornare il modello dal database.> Scheda Aggiorna> tabelle> selezionare la tabella (che si desidera aggiornare) e premere Fine.

+7

Non penso che sia giusto/Da quello che posso dire, aggiorna tutto nella scheda Aggiorna. Questo è il problema originale dell'OP (e mio). –

+2

Questo non risolve la domanda posta e può fare più danni quando si rinfresca l'intero modello. –

+3

Mentre l'interfaccia utente fa sembrare che è possibile aggiornare solo una singola tabella, il risultato è che tutte le tabelle vengono aggiornate. Quindi, sfortunatamente, questa risposta non è corretta. Sarebbe bello se l'editor fosse aggiornato per funzionare come descritto qui. –

5

Uso il seguente trucco (condizionale). Questo può essere fatto solo quando nessuna tabella dipende dalla tabella che si desidera aggiornare.

  1. Eliminare la tabella che deve essere aggiornata.
  2. Fare clic con il tasto destro su Modello e selezionare "Aggiorna modello dal database". La tabella verrebbe visualizzata nella scheda "Aggiungi". Seleziona questa tabella e Aggiorna il modello.

Precauzione: se altre tabelle esistenti hanno cambiamenti in loro, EF avrebbe aggiornare queste modifiche pure.

+2

Questo aggiorna le colonne in altre tabelle per me. – Marshal

+1

Hmm .. EF aggiornerebbe anche le colonne in altre tabelle. Non so come evitarlo. :-( –