Entity Framework 7 con database esistente in .Net 5 MVC 6

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

Domanda

Ciao Sto avendo qualche problema a tirare i dati da un database esistente in Utilizzo di Entity Framework 7 MVC 6. (Ho postato il codice del progetto qui ). Ho configurato appsettings.json con la stringa di connessione corretta:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

Ho il mio contesto personalizzato:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

Due classi Poco:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

E sto configurando il servizio in startup.cs

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

Controller dei miei utenti:

"Data": {
    "DefaultConnection": {
        "ConnectionString": "Data Source=localhost;Initial Catalog=Demo;Integrated Security=True"
}

Continuo a ricevere il seguente errore sulla riga Elenco quando navigo alla pagina Utenti / indice:

$ exception {"Riferimento oggetto non impostato su un'istanza di un oggetto."} System.NullReferenceException

Per qualche ragione non sta estraendo le informazioni dal database. Lo creo in Microsoft SQLServer 2014. E ci sono dati nella tabella degli utenti. Mi manca un passaggio o sto tentando di accedere ai dati nel modo sbagliato?

Risposta accettata

Il problema principale può essere risolto con l'uso di

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

invece di

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

È possibile usare

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

ma si deve rimuovere il costruttore public UsersController(DatabaseContext context) . L'ultimo modo non è raccomandato, perché RC2 ha abbandonato la seconda strada. Vedi l'annuncio .

Le modifiche sopra riportate risolvono il primo problema che si ha, ma il database ei dati di test che si utilizzano producono un altro problema, poiché il campo Updated delle tabelle Users e Customers contiene valori NULL . Quindi devi usare

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

invece di

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

Il modo in cui ti consiglierei è l'uso del consiglio

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

che puoi eseguire nella stessa directory in cui è presente project.json principale (in src\JenSolo ). Ho spostato parti del comando sulla nuova riga per una lettura migliore. Uno dovrebbe mettere tutto in una linea di causa. Il comando precedente creerà le classi Users e Customers invece di [Table("Users")]User e [Table("Customers")]Customer , ma è possibile utilizzare il codice come base e apportare manualmente tutte le modifiche necessarie.

AGGIORNATO: Mi sembra che il seguente comando corrisponda meglio alla generazione delle classi dello scaffold:

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

perché si utilizza Libreria di classi Bestro nel progetto principale JenSolo. Dovresti eseguire il comando precedente dalla riga di comando con la cartella ...\src\JenSolo come directory corrente. Creerà la cartella Model nel progetto Libreria di classi (Bestro). La cartella Model conterrà molti file *.cs : un file per ogni tabella di database e un file aggiuntivo DemoContext.cs , che contiene la classe DemoContext derivata da DbContext ( Demo è il nome del database, che si utilizza). È necessario rimuovere la funzione OnConfiguring da DemoContext.cs per poter configurare la stringa di connessione tramite

public UsersController([FromServices] DatabaseContext context)
{
    _context = context;
}

in ConfigureServices di Startup.cs del progetto principale JenSolo .

AGGIORNATO: A partire da .NET Core RC2 si dovrebbe usare lo scaffold dotnet ef dbcontext invece dello scaffold dnx ef dbcontext scaffold .




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é