2017-11-29 3 views
0

Ich arbeite an einer ASP.Net Core 2 MVC-Anwendung.Fehler in asp.net MVC Core 2 Gerüst generiert Controller

Ich erzeuge einen Controller pro Tisch für meine Back-Office mit diesem Befehl:

dotnet aspnet-codegenerator --project . controller -name MYTABLEController -m MYTABLE -dc MYDBContext 

(ersetzen MYTABLE und MYDBContext Beispiele sind).

Hier ist, was die csharp-Controller wie folgt aussieht:

namespace MYPROJECT.Controllers 
{ 
    public class MYTABLEController : Controller 
    { 
     private readonly MYDBContext _context; 

     public ContactsController(MYDBContext context) 
     { 
      _context = context; 
     } 

Hat man sieht es einen Konstruktor erstellt, die einen Parameter akzeptiert: das Datenbankobjekt (EntityFramework).

Wenn ich die Webseite aufruft, bekomme ich einen Fehler in diesem Kontext, weil sie nicht initialisiert ist.

Hier ist, was ich zu tun, damit es funktioniert:

namespace MYPROJECT.Controllers 
{ 
    public class MYTABLEController : Controller 
    { 
     private readonly MYDBContext _context = new MYDBContext(); 

     public ContactsController() 
     { 

     } 

Also meine Frage lautet:

  1. Gibt es einen besten Weg, um dieses Problem zu beheben? Ich frage mich, ob es wirklich ein Fehler ist oder wenn ich etwas vermisse.

  2. Aussehen und Verhalten jeder generierten HTML-Ansicht ist sehr hässlich. Gibt es einige Möglichkeiten, um etwas sexy zu bekommen?

Dank

Antwort

1

Der Code erzeugt Controller scheint in Ordnung. Sie haben den genauen Fehler nicht erwähnt, aber ich nehme an, dass Sie den Fehler erhalten, weil Sie den MYDBContext nicht in Ihrem Dienstcontainer hinzugefügt haben.

In Ihrer Datei startup.cs müssen Sie diesen MYDBContext in den Dienstcontainer aufnehmen, so dass Ihr Controller sie korrekt injiziert. Beispiel

services.AddDbContext<MYDBContext>(options => 
     options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); 

Nachdem dies zu tun, wenn Sie den Fehler als unten:

System.ArgumentException: AddDbContext was called with configuration, but the context type 'MyDBContext' only declares a parameterless constructor. 

dann bedeutet es, Ihre rüsteten DbContext nicht richtig mit dem richtigen Optionen Parameter injiziert werden konfiguriert ist. Aktualisieren Sie den Konstruktor:

public partial class MYDBContext : DbContext 
{ 
    public MYDBContext(DbContextOptions<MYDBContext> options) 
     : base(options) 
    { 

    } 
+0

ich diesen Fehler jetzt: System.ArgumentException: AddDbContext mit Konfiguration genannt wurde, aber der Kontext Typ ‚MyDBContext‘ erklärt nur einen parameterlosen Konstruktor. – Bob5421

+0

aktualisiert die Antwort, werfen Sie einen Blick. Wahrscheinlich müssen Sie Ihre DbContext-Klasse aktualisieren. –

+0

In diesem Fall habe ich "InvalidOperationException: Service konnte für den Typ 'XXXX.XXXXContext' nicht aufgelöst werden beim Versuch, 'XXXXX.ControllersXXXController' zu aktivieren. – Bob5421