Al momento della creazione di un nuovo controller MVC:
dopo aver fatto clic sul pulsante Aggiungi, ottengo il seguente errore:
Ecco la mia semplice classe Context:
public class MainDbContext : DbContext
{
public MainDbContext(DbContextOptions<MainDbContext> options) : base(options)
{
}
public DbSet<Todo> Todo { get; set; }
}
e il mio modello semplice:
public partial class Todo
{
public int Id { get; set; }
public string TaskName { get; set; }
}
Ho effettuato alcune ricerche su questo problema, la maggior parte dei post punta a un elenco a discesa oa un metodo SelectList che utilizza MVC, ma nel mio caso si tratta di un errore di creazione del controller, quindi sembra essere un problema di Entity Framework Core
Qualsiasi aiuto ?
Grazie al commento @poke sopra, e al seguente link: "Usa il codice prima con la connessione per convenzione" , modificando la classe di contesto come segue, C # richiamerà per impostazione predefinita il costruttore senza parametri della classe base
public class MainDbContext : DbContext
{
public MainDbContext()
// C# will call base class parameterless constructor by default
{
}
}
È un errore di lavorazione. Molto probabilmente, stai utilizzando Visual Studio 2015, che non ha il supporto completo per .NET Core. Fondamentalmente, nelle versioni precedenti di EF, DbContext
disponeva di un costruttore senza parametri e questa versione del generatore di scaffold dipende da questo. In EF Core, DbContext
non ha un costruttore senza parametri, quindi il generatore si sta soffocando.
Se utilizzi VS2015, esegui l'upgrade fino al 2017. È ora. A parte questo, non ne hai comunque bisogno, e ti sta solo conducendo su una cattiva strada. Tutto lo scaffold fa è creare una nuova classe sotto Controller
, chiamato {Name}Controller
che eredita dal Controller
. Quindi crea una cartella denominata {Name}
in Views
e aggiunge un codice HTML di base per eseguire CRUD. Finirai per sostituire la maggior parte di questo HTML comunque. Inoltre, lo scaffold richiede di lavorare con una classe entità reale, che è l'ultima cosa che dovresti fare. Devi sempre accettare l'input dell'utente tramite un modello di visualizzazione e quindi mappare i dati inviati sulla tua classe di entità prima di salvare finalmente l'entità. Osserva che l'impalcatura viene rotta come un'eccellente opportunità per iniziare a imparare come creare un buon codice.