12

Sto cercando di generare un DbContext per una struttura di database esistente utilizzando ASP.NET 5 e Entity Framework 7. Non sorprende che non ci sia molta documentazione su come farlo facilmente. Inoltre, voglio impalcare SOLO il contesto; ci sono ~ 900 tabelle e mi interessa solo alcune di esse, non ho bisogno di una classe di modello per ognuna.Entity Framework 7 DbContext scaffold

Ho usato i comandi specificati here e here con un po 'di fortuna.

Quindi, penso che ho due domande:

  1. dove sono i file di contesto generati situati? Eseguo il comando nel prompt dei comandi senza errori, ma non succede nient'altro. So di essere almeno nel posto giusto in quanto posso aggiungere il vecchio modello EF6 con proprietà non supportate e mi dà un errore che non sono supportati.

  2. È possibile generare solo un contesto senza classi di modello corrispondenti?

+0

quando dici che hai avuto "poca fortuna" con questi comandi, qual era il problema esattamente? – DavidG

+0

@DavidG quando eseguo il comando nel prompt, non ottengo alcun risultato. Nessun errore, ma anche nessun successo. Il mio file di contesto rimane vuoto e non ne vedo un altro aggiunto al filesystem. – awh112

risposta

-3

Proverei codice prima da un database esistente. È possibile creare la classe contesto di simile a questa:

public class MyDbContext : DbContext { 

     public MyDbContext() 
      : base("connectionString") { 
      Database.SetInitializer<MyDbContext>(null); 
     } 

     public virtual DbSet<Table1> Table1s { get; set; } 

     public virtual DbSet<Table2> Table2s { get; set; } 

     ... 
} 

È possibile includere DbSets per solo quelle tabelle necessarie. Si creano i modelli corrispondenti necessari (tabella 1, tabella 2, ecc.) E i controllori dello scaffold e le viste da tali modelli.

+0

Buona fortuna se hai bisogno di modellare 100 tavoli! – DavidG

+0

Grazie per il suggerimento! Il problema con questo sembra essere che il Database a cui si fa riferimento sopra è System.Data, mentre sto usando Microsoft.Data e l'oggetto DatabaseFacade esposto al di fuori del contesto di base non ha il metodo 'SetInitializer'. – awh112

+0

@DavidG Fortunatamente ho solo bisogno di modellare ~ 5 tavoli dai molti che ci sono! – awh112

0

Per EF 7, non è più necessario inizializzarsi con la base, provocando in genere un errore del compilatore. che cosa avete bisogno di guardare in quanto il Microsoft EF7 starting docs.

Si vuole prestare attenzione alla nuova

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     // Visual Studio 2015 | Use the LocalDb 12 instance created by Visual Studio 
     optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 

     // Visual Studio 2013 | Use the LocalDb 11 instance created by Visual Studio 
     // optionsBuilder.UseSqlServer(@"Server=(localdb)\v11.0;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 

     // Visual Studio 2012 | Use the SQL Express instance created by Visual Studio 
     // optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=EFGetStarted.ConsoleApp;Trusted_Connection=True;"); 
    } 
12

Ho avuto lo stesso problema con il mio progetto di generare il contesto e dei modelli. Ecco alcune cose che ho fatto.

versioni di 1.0 RC1 sotto

Project.json

"dependencies": { 
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", 
    "EntityFramework.Commands": "7.0.0-rc1-final", 
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc1-final" 
    }, 

    "commands": { 
    "ef": "EntityFramework.Commands" 
    }, 

    "frameworks": { 
    "dnx451": { }, 
    "dnxcore50": { } 
    } 

DNX Comando

dnx ef dbcontext scaffold "connectionString" EntityFramework.MicrosoftSqlServer 

originale post qui sotto

assicurarsi che questi vengono aggiunti al file project.json:

"dependencies": { 
    "EntityFramework.SqlServer": "7.0.0-beta7", 
    "EntityFramework.Commands": "7.0.0-beta7", 
    "EntityFramework.SqlServer.Design": "7.0.0-beta7" 
}, 
"commands": { 
    "ef": "EntityFramework.Commands" 
} 

dnvm Aggiornamento e tempi di esecuzione DNX nonché utilizzando dnvm update-sé e dnvm aggiornare. Ho eseguito questo in cmd.

Aperto cmd.exe nel percorso del progetto (se ci si trova in Windows, passare alla cartella e spostare + clic con il pulsante destro del mouse nella cartella e fare clic su "Apri finestra di comando qui"). Nel mio caso ho avuto un progetto separato per il mio Data Access Layer ad es.

C:\Projects\Stackoverflow Example\src\StackoverflowExample.DAL\ 

Ho poi Simplay corse:

dnx ef DbContext patibolo "Data Source = .; iniziale Catalogo = banca dati; Integrated Security = True" EntityFramework.SqlServer

Assicurati che il tuo progetto possa costruire. Se ci sono errori, i comandi probabilmente non funzioneranno.

Ha generato tutti i modelli e il contesto (con l'installazione OnModelCreating() di ciascuna entità). Se non hai bisogno di tutti i modelli, elimina quelli che non stai utilizzando.

Quindi, per rispondere voi domande:

  1. crea i modelli e il contesto nella cartella in cui è stato eseguito il dnx ef DbContext impalcatura in
  2. Non posso vedere tutti i comandi che ti permette di fare questo ancora. . Esegui dnx ef --help in cmd e cerca te stesso. dnx ef

Spero che questo aiuti.

+0

seguito gli stessi passaggi tranne che ho dovuto installare tutti i pacchetti da linea di comando con "dnu", grazie! – LeLong37

+0

il tuo livello DAL è un progetto di quale tipo? la maggior parte dei tipi di progetto non supporta project.json – pootzko

+1

@pootzko Ho usato una libreria di classi (pacchetto) nel framework 4.6. Riferito che nel mio BL, che è anche una libreria di classi, ha fatto riferimento al BL nella mia applicazione Web ASP.NET 5. La suddivisione ha funzionato per me a causa della complessità del mio progetto, ma in realtà è possibile eseguirlo tutto in un unico progetto di applicazione Web. –

3

Un'opzione --table (-t) esiste per il comando scaffold:

dnx ef dbcontext scaffold connectionstring provider -t dbo.tab1 -t dbo.tab2 
Problemi correlati