5

Ho utilizzato EF per un po 'di tempo, sempre nell'approccio Model-First. Ora sto avventurando attraverso le terre Code-First. Il fatto è: ho riscontrato problemi con la creazione automatica di tabelle.EntityFramework che non crea tabelle

Secondo alcuni siti è possibile. E ho provato il loro approccio senza successo.

Ecco una delle cose che ho provato: Database.CreateIfNotExists()

Nessuna fortuna ...

mia stringa di connessione è perfetto e funzionante. Se aggiungo manualmente la tabella, funziona. Il problema è quando non ho creato la tabella. Semplicemente non crea come mi è stato detto.

Le mie classi sono decorate correttamente. (Ancora: Funziona quando ho creato i DB)

Qualche suggerimento? Funziona davvero?

sto usando:

Visual Studio 2010 Professional

EntityFramework 4.3.1 (anche se ho provato con 4.1 anche)

SQL Server 2008 R2

Grazie in anticipo.

+0

Hai creato la tua classe di contesto che deriva da DbContext? e quindi effettuare una chiamata che utilizza DbSet Entità nel contesto – Sergey

+2

Database.CreateIfNotExists() causerà solo EF per creare la tabella se il database stesso non esiste (nel qual caso crea il database e la tabella). Non lo farà creare automaticamente la tabella se esiste un database ma la tabella sembra essere mancante. Questo è forse quello che stai scontando? –

+0

@Sergey Sì, l'ho fatto. – eestein

risposta

5

Esistono tre inizializzatori di database inclusi nel framework entità che implementano l'interfaccia IDatabaseInitializer<Context>. Essi sono:

  • CreateDatabaseIfNotExist (default)
  • DropCreateDatabaseWhenModelChanges
  • DropCreateDatabaseAlways

Come si vede l'API di default non ha l'inizializzazione che crea solo le tabelle, invece lo fa l'intero database. Tuttavia ci sono altri inizializzatori che le persone hanno creato, ce n'è uno che fa esattamente la stessa cosa che vuoi.

E 'nel pacchetto Nuget EFCodeFirst.CreateTablesOnly

Un'altra opzione è quella di creare il proprio initializer se questo è qualcosa che si ha realmente bisogno.

+0

Grazie per la risposta. Più tardi stanotte ci proverò e ti faccio sapere come è andata accettando la risposta. Grazie ancora! – eestein

+0

Prego :) – Sergey

+0

Ha funzionato, grazie amico. – eestein

Problemi correlati