2012-10-24 10 views
9

In Visual Studio 2010 EF 4, è possibile aggiungere una nuova colonna a una tabella di database, quindi fare clic su "Aggiorna modello dal database" sul mio .edmx e tutto andava bene nel mondo.VS 2012 - EF 5.0 - Aggiorna modello dal database - Non raccogliere le modifiche della tabella

In Visual Studio 2012 EF 5, altero una tabella, quindi faccio clic su "Aggiorna modello dal database" e non rilevo più le modifiche alle singole tabelle.

Mi manca qualcosa ... o si tratta di una nuova 'funzione' di VS2012?

Aggiornamento L'unico modo per ottenere un tavolo con una colonna aggiunta a riflettere nel file .edmx è quello di eliminare la tabella poi 'Aggiornamento del modello dal database' e sarà raccogliere la colonna aggiunta. Tuttavia, mette il tavolo aggiunto lontano a sinistra e devo spostarlo di nuovo in posizione. No biggie solo un fastidio.

+2

Questo è sempre stato stravagante, anche tra il 2010 e il 2008. Alcuni tipi di modifiche non sono mai state propagate al modello. Forse questo è uno di quei casi? –

+1

Ti ho sentito, ma almeno ha funzionato nel 2010 per aggiornare un tavolo e l'EDMX lo avrebbe rilevato. Questo mi riporta ai giorni LINQ, in cui devi eliminare l'elemento, quindi aggiungerlo di nuovo in ... ugh – c0d3p03t

+0

Come ho detto, non è sempre stato così. E spesso dovevi aggiornare l'oggetto manualmente, oppure eliminare e riaggiungere. –

risposta

2

Esiste una differenza tra l'avere un modello EF e il modo in cui è sottolineato nel database. Quando si aggiorna il modello dal database, se l'entità/tabella è già stata importata nel modello di dati, si aggiornerà l'entità. Questo processo non mapperà automaticamente lo schema del database al modello dati esistente, è tuttavia possibile aggiungere una proprietà all'entità nel modello EF e quindi mappare la proprietà alla colonna del database (questo è esattamente ciò che EF fa automaticamente quando si cancella e aggiorna normalmente).

Quando si elimina prima l'entità, quindi l'EF di aggiornamento sa che la tabella/entità non è stata importata prima e quindi mapperà automaticamente tutte le colonne del database.

In sintesi, non è necessario eliminare l'entità, ma può essere più semplice farlo per entità semplici.

+0

Non la risposta Speravo, ma aiuta, grazie! – c0d3p03t

+0

Lo so, è un fastidio a dir poco. Immagino sia perché avresti potuto apportare ulteriori modifiche all'entità tra quando l'hai aggiunta e quando l'hai aggiornata, ma non dovrebbe essere solo un confronto di controllo hash? Sono sicuro che il team di ADO.NET ha le sue ragioni. –

8

Sì, questo funziona ancora in VS2012. Stai usando la generazione di codice predefinita o hai un file TT? Potrebbe essere che sia stato aggiunto a EDMX ma i tuoi file di classe non vengono aggiornati.

Prova a fare clic con il pulsante destro del mouse sul file EDMX o sul file TT pertinente in Solution Explorer e seleziona "Esegui strumento personalizzato" per assicurarti che venga rigenerato.

+0

Questo infatti ricostruisce le classi e preleva le modifiche al file .edmx. Tuttavia, se modifico una tabella, non è ancora in grado di rilevare tali modifiche. Vedi qui: [screenshot] (http://screencast.com/t/fahh6WqNYZ) – c0d3p03t

+0

La tabella con le nuove colonne non verrà visualizzata nella scheda "Aggiungi"; saranno nella scheda "Aggiorna". La tua tabella è elencata in Aggiorna in quella scheda? L'aggiunta di una nuova colonna a un tavolo esistente ha * sempre * funzionato per me nel 2010 e 2012. Ma sì, il fatto di rimandare WAAAY su un lato è una nuova funzionalità del 2012 :) –

+0

+1 per "Esegui strumento personalizzato" – ADOConnection

0

Avevo uno stesso/lo stesso problema e ho eliminato la tabella dal modello, quindi ho scelto "Aggiorna modello dal database". Anche in questo caso non ha funzionato, e non ho potuto accedere alla nuova colonna che ho aggiunto alla tabella.

Tuttavia, una volta controllato manualmente il file di progettazione del modello dal controllo del codice sorgente (Vault Professional), quindi eliminato la tabella dal modello e aggiornato di nuovo il modello dal database, ha funzionato. Quindi forse VS non sa di controllare il file del designer del modello in questa particolare istanza.

0

è successo perché si elimina una delle entità e ora si desidera aggiornarlo nuovamente dal database. Il modello memorizza nella cache questa enitità. Ecco perché non si ottiene la scelta di aggiornare la tabella. Quindi, fare clic con il tasto destro del mouse su nella pagina del modello e selezionare l'opzione del browser del modello. Sul lato destro troverai il browser del modello. Elimina l'entità che vuoi aggiornare dalla cartella del tipo di entità. Ora fai quello che vuoi.

Problemi correlati