.net - property - totable entity framework




Aggiorna lo schema del database in Entity Framework (5)

Ho installato VS SP1 e giocato con Entity Framework.

Ho creato uno schema da un database esistente e ho provato alcune operazioni di base.

La maggior parte è andata bene, tranne l'aggiornamento dello schema del database.

Ho cambiato il database in ogni modo base:

  • ha aggiunto una nuova tabella
  • cancellato una tabella
  • aggiunta una nuova colonna a una tabella esistente
  • cancellata una colonna da una tabella esistente
  • cambiato il tipo di una colonna esistente

I primi tre sono andati bene, ma il cambio di tipo e l'eliminazione della colonna non hanno seguito le modifiche del database.

C'è un modo per fare è lavorare dal designer? O non è supportato al momento? Non ho ancora trovato materiale correlato, ma sto ancora cercando.


Direi che probabilmente quelli non accadono perché potrebbero rompere la build per il codice esistente, ma è solo un'ipotesi da parte mia.

Ecco la mia logica:

In primo luogo, EF dovrebbe essere più di 1: 1 mapping di tabelle, quindi è abbastanza probabile che solo perché si sta eliminando una colonna dalla tabella A non significa che per quell'entità, non ci dovrebbe essere una descrizione di proprietà. Si potrebbe semplicemente mappare quella proprietà su un'altra tabella.

In secondo luogo, la modifica di un tipo potrebbe solo interrompere le build. questo è l'unico fondamento logico lì.


Dalle demo del designer che ho visto, non è uno strumento impeccabile. È un prodotto versione 1.0, quindi è destinato ad avere alcuni punti deboli. Il tipo di modifica è uno di quelli che sembra. Dall'osservare il progettista e la generazione del codice, ho pensato che si sarebbe interrotto in fase di compilazione (non probabile) o in fase di esecuzione (quando il modello è effettivamente eseguito).


Ho scoperto che, in generale, ci sono ancora alcuni bug con la funzionalità "Aggiorna modello dal database".

Le chiavi sono l'assassino per me - Devo ancora avere qualsiasi modifica apportata a una relazione di chiave esterna o aggiungere una chiave primaria a una tabella e fare in modo che il programma di aggiornamento funzioni correttamente (nel senso che fornirà un errore di compilazione sul generato codice) - ma per risolvere il problema è sufficiente cancellare il modello e reimportare (richiede solo un minuto) - questo ovviamente non è l'ideale, ma non ho mai avuto un errore da un'importazione "fresca".


Come accennato in precedenza, puoi semplicemente eliminare la colonna dal designer. Per quanto riguarda la modifica del tipo di dati della colonna: basta aggiornare il modello dal database, quindi andare ai mapping della tabella e selezionare la colonna che è stata modificata nel DB. i valori a destra rappresentano il tuo modello, stranamente questo non viene aggiornato automaticamente, ma basta selezionare la colonna a destra e andare alle proprietà e cambiare il tipo di dati lì. Dovrebbe diventare un menu a discesa.

Saluti.

rubicondo


Il modo in cui sto facendo questo (e sto facendo tutte le cose che citi, oltre a rinominare le colonne) è apportare modifiche al database e rigenerare il codice EF usando EF Code First.

Non sto manomettendo il codice EF Prime classi per il buono o il cattivo (comprese le colonne senza senso per le relazioni) per facilitare il processo.

Nessun generatore di schemi di progettazione o ORM sarà in grado di apportare modifiche al database di produzione se contiene dati vincolati. Questo è il motivo per cui dovresti sempre iniziare a controllare se le tue modifiche al DB sono fattibili, provarle su un database di sviluppo e quindi adattare il tuo codice per riflettere le modifiche.





schema