Domanda

Ho installato VS SP1 e ho 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 fondamentale:

  • aggiunta una nuova tabella
  • eliminato una tabella
  • aggiunta una nuova colonna a una tabella esistente
  • eliminato una colonna da una tabella esistente
  • modificato il tipo di una colonna esistente

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

C'è un modo per far funzionare il designer?Oppure al momento non è supportato?Non ho ancora trovato materiale correlato, ma sto ancora cercando.

È stato utile?

Soluzione

Immagino che forse ciò non accada perché interromperebbero la creazione del codice esistente, ma è solo una mia ipotesi.

Ecco la mia logica:

Innanzitutto, EF dovrebbe essere più di una mappatura di tabella 1:1, quindi è del tutto possibile che solo perché stai eliminando una colonna dalla tabella A non significa che per quell'entità non dovrebbe esserci una proprietà Descrizione.Potresti semplicemente mappare quella proprietà su un'altra tabella.

In secondo luogo, la modifica di un tipo potrebbe semplicemente interrompere le build.questa è l'unica logica lì.

Altri suggerimenti

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

Le chiavi sono il killer per me: devo ancora apportare alcuna modifica a una relazione di chiave esterna o aggiungere una chiave primaria a una tabella e far funzionare correttamente l'aggiornamento (nel senso che darà un errore di compilazione sul file generato code) - ma per risolvere il problema è sufficiente eliminare il modello e reimportarlo (richiede solo un minuto) - questo ovviamente non è l'ideale, ma non ho mai avuto problemi con un'importazione "fresca".

Dalle demo del designer che ho visto, non è uno strumento impeccabile.È un prodotto della versione 1.0, quindi è destinato ad avere alcuni punti critici.Il tipo di cambiamento è uno di questi, a quanto pare.Osservando il progettista e la generazione del codice, ho pensato che uno si sarebbe rotto in fase di compilazione (improbabile) o in fase di esecuzione (quando il modello viene effettivamente eseguito).

È necessario eliminare manualmente la colonna dal designer o dal file XML.

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 alle mappature delle tabelle e selezionare la colonna che hai modificato 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 modificare lì il tipo di dati.Dovrebbe diventare un menu a discesa.

Saluti.

Ruddy

Ho creato un'applicazione simile come da te richiesto.Ma la mia soluzione era troppo difficile.Proverò a dirlo;

  1. Devi creare le tue classi di gestione del database e questi oggetti saranno responsabili della creazione e dell'aggiornamento dello schema del database (l'ho creato manualmente).

  2. Ho visto un buon articolo e codice sorgente su Blog del team ADO.NET quindi puoi anche scaricare EDMTools da questo blog, è open source.E puoi anche implementare la generazione del modello e aggiornare le routine da esso nel tuo progetto.

  3. Infine, quando il tuo schema è cambiato, dovresti ricreare e associare il tuo modello e ricostruire l'assemblaggio di dati durante il runtime.Ma devi sapere cosa più importante, dovresti collegare l'assieme del tuo modello di dati al tuo progetto con un accoppiamento flessibile (guarda questo inviare)

    In altro modo, dovresti attendere il rilascio di EF 4.0 (ora CTP 1), hanno annunciato che forniranno le funzioni di creazione, eliminazione e aggiornamento di DatabaseScript.

Buona serratura

Il modo in cui lo faccio (e sto facendo tutte le cose che hai menzionato, oltre a rinominare le colonne) è apportare modifiche al database e rigenerare il codice EF utilizzando EF Code First.

Non sto manomettendo le classi EF Code First nel bene o nel male (comprese le colonne con nomi senza senso per le relazioni) per facilitare il processo.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top