Entity Framework 7 Database First configuration (MVC 6)

asp.net-core asp.net-core-mvc entity-framework-core

Domanda

Dopo una lunga e costante lotta, finalmente abbiamo capito come utilizzare il primo approccio al database EF7 usando MVC 6. Ecco come va:

App.Impl -> project.json:

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

Quindi eseguendo il comando da cmd:

dnx ef dbcontext scaffold "Server=ip,port;Database=db;User Id=user;Password=pass;" EntityFramework.MicrosoftSqlServer

3 problemi che sto affrontando con questo. Nel mio progetto Impl.

  1. Ho una cartella dedicata a Data. La cartella My Data dovrebbe contenere tutte le cose relative al database come DbContext, DbClasses. Tuttavia, Scaffold crea questi file nella radice. Come posso specificare la cartella in cui voglio creare questi file?

  2. Nel mio posto di lavoro, potrei avere un database con 50 tabelle. Tuttavia, cosa succede se ho solo bisogno di accedere a 2? Non voglio aggiungere tutte le 50 tabelle per il mio progetto. Come posso specificare quali tabelle voglio?

  3. Sul mio Database, potrei avere una tabella denominata "Utenti" perché è una tabella che contiene utenti. Tuttavia, lo scaffold dovrebbe creare una classe come "Utente", poiché è un singolo utente fino a quando non diventa List. Come posso specificare il nome della tabella che si sta creando?

Grazie a tutti per l'aiuto.

Risposta accettata

Prova ad usare

dnx ef dbcontext scaffold 
    "Server=Server\InstanceName;Database=db;Trusted_Connection=True;"
    EntityFramework.MicrosoftSqlServer 
    --dataAnnotations
    --outputDir Data
    --verbose
    --table dbo.Users

Tutti i parametri sopra dovrebbero essere nella stessa riga, ma ho avvolto la lunga fila per leggerlo più facilmente. Puoi guardare il codice sorgente per vedere quali opzioni supportano il comando scaffold in RC1.

appsettings.json attenzione a copiare e incollare ConnectionString da appsettings.json perché potresti avere Server=Server\\InstanceName; in ConnectionString , ma dnx ef dbcontext scaffold accetta attualmente solo Server=Server\InstanceName; e riceverai l' errore System.InvalidOperationException sull'utilizzo di Server=Server\\InstanceName; copiata direttamente da ConnectionString di appsettings.json .

Un altro parametro importante è -p | --targetProject , che è importante se si utilizza il repository nella libreria di classi. Nel caso in cui si definisca il comando ef nel progetto principale, si avvia dnx ef dbcontext scaffold nella directory del progetto principale, ma si usa -p per fare riferimento al progetto della libreria di classi.

L'ultima osservazione. A volte è necessario impalcettare sottoinsiemi di tabelle dal database. Non è completamente chiaro dall'aiuto della riga di comando, ma è possibile specificare più volte il parametro -t ( -table ) . Vedi la nota nel wiki EF7. Pertanto, se desideri importare solo due tabelle dbo.Users e dbo.Posts (se Posts ha una chiave esterna per gli Users ), puoi utilizzare la seguente sintassi

dnx ef dbcontext scaffold 
    "Server=Server\InstanceName;Database=db;Trusted_Connection=True;"
    EntityFramework.MicrosoftSqlServer 
    -a
    -o Models
    -v
    -t dbo.Users
    -t dbo.Posts

AGGIORNATO: Si dovrebbe usare dotnet ef dbcontext scaffold invece dello dotnet ef dbcontext scaffold dnx ef dbcontext scaffold in ASP.NET Core RC2 e dnx ef dbcontext scaffold successive.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché