2017-07-05 4 views
1

Ich habe vor kurzem eine Tabelle reverse entwickelt, um ein Modell und eine Kontextklasse zu erstellen. Ich habe dann einen Controller und eine Ansicht von VS 2017 Gerüst erstellt. Wenn ich versuche, meine Seite zu laden erhalte ich folgende Fehlermeldung:.NET Core MVC Controller Fehler

InvalidOperationException: Unable to resolve service for type 'TestSolutions.Models.TraderRoute.TraderContext' while attempting to activate 'TestSolutions.Controllers.RoutePartnersController'.

Microsoft.Extensions.Internal.ActivatorUtilities.GetService(IServiceProvider sp, Type type, Type requiredBy, bool isDefaultParameterRequired)

-Controller.

public class RoutePartnersController : Controller 
{ 
    private readonly TraderContext _context; 

    public RoutePartnersController(TraderContext context) 
    { 
     _context = context;  
    } 

    // GET: RoutePartners 
    public async Task<IActionResult> Index() 
    { 
     return View(await _context.RoutePartner.ToListAsync()); 
    } 

    // GET: RoutePartners/Details/5 
    public async Task<IActionResult> Details(Guid? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var routePartner = await _context.RoutePartner 
      .SingleOrDefaultAsync(m => m.PartnerId == id); 
     if (routePartner == null) 
     { 
      return NotFound(); 
     } 

     return View(routePartner); 
    } 

    // GET: RoutePartners/Create 
    public IActionResult Create() 
    { 
     return View(); 
    } 

    // POST: RoutePartners/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Create([Bind("Id,PartnerId,RouteCompany,RouteCode,Dark,Lit,Contra,CreateDate,CreateBy")] RoutePartner routePartner) 
    { 
     if (ModelState.IsValid) 
     { 
      routePartner.PartnerId = Guid.NewGuid(); 
      _context.Add(routePartner); 
      await _context.SaveChangesAsync(); 
      return RedirectToAction("Index"); 
     } 
     return View(routePartner); 
    } 

    // GET: RoutePartners/Edit/5 
    public async Task<IActionResult> Edit(Guid? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var routePartner = await _context.RoutePartner.SingleOrDefaultAsync(m => m.PartnerId == id); 
     if (routePartner == null) 
     { 
      return NotFound(); 
     } 
     return View(routePartner); 
    } 

    // POST: RoutePartners/Edit/5 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> Edit(Guid id, [Bind("Id,PartnerId,RouteCompany,RouteCode,Dark,Lit,Contra,CreateDate,CreateBy")] RoutePartner routePartner) 
    { 
     if (id != routePartner.PartnerId) 
     { 
      return NotFound(); 
     } 

     if (ModelState.IsValid) 
     { 
      try 
      { 
       _context.Update(routePartner); 
       await _context.SaveChangesAsync(); 
      } 
      catch (DbUpdateConcurrencyException) 
      { 
       if (!RoutePartnerExists(routePartner.PartnerId)) 
       { 
        return NotFound(); 
       } 
       else 
       { 
        throw; 
       } 
      } 
      return RedirectToAction("Index"); 
     } 
     return View(routePartner); 
    } 

    // GET: RoutePartners/Delete/5 
    public async Task<IActionResult> Delete(Guid? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var routePartner = await _context.RoutePartner 
      .SingleOrDefaultAsync(m => m.PartnerId == id); 
     if (routePartner == null) 
     { 
      return NotFound(); 
     } 

     return View(routePartner); 
    } 

    // POST: RoutePartners/Delete/5 
    [HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public async Task<IActionResult> DeleteConfirmed(Guid id) 
    { 
     var routePartner = await _context.RoutePartner.SingleOrDefaultAsync(m => m.PartnerId == id); 
     _context.RoutePartner.Remove(routePartner); 
     await _context.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 

    private bool RoutePartnerExists(Guid id) 
    { 
     return _context.RoutePartner.Any(e => e.PartnerId == id); 
    } 
} 

Hier ist meine Ansicht:

@model TestSolutions.Models.TraderRoute.RoutePartner 
@{ViewData["Title"] = "Details";} 


<h2>Details</h2> 

<div> 
<h4>RoutePartner</h4> 
<hr /> 

<dl class="dl-horizontal"> 
<dt> 
     @Html.DisplayNameFor(model => model.Id) 
</dt> 
<dd> 
     @Html.DisplayFor(model => model.Id) 
</dd> 
<dt> 
     @Html.DisplayNameFor(model => model.Dark) 
</dt> 
<dd> 
     @Html.DisplayFor(model => model.Dark) 
</dd> 
<dt> 
     @Html.DisplayNameFor(model => model.Lit) 
</dt> 
<dd> 
     @Html.DisplayFor(model => model.Lit) 
    </dd> 
    <dt> 
     @Html.DisplayNameFor(model => model.Contra) 
    </dt> 
    <dd> 
     @Html.DisplayFor(model => model.Contra) 
    </dd> 
    <dt> 
     @Html.DisplayNameFor(model => model.CreateDate) 
    </dt> 
    <dd> 
     @Html.DisplayFor(model => model.CreateDate) 
    </dd> 
    <dt> 
     @Html.DisplayNameFor(model => model.CreateBy) 
    </dt> 
    <dd> 
     @Html.DisplayFor(model => model.CreateBy) 
    </dd> 
</dl> 
</div> 
<div> 
    @Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) | <a asp-action="Index">Back to List</a> 
</div> 
+1

Könnten Sie bitte den Controller teilen und sehen? –

+0

Gerade hinzugefügt, danke – Dann055

+0

Könnten Sie auch zeigen, wie Sie 'TraderContext' mit DI in Ihrer 'Startup'-Klasse registrieren? – Ignas

Antwort

1

Es scheint, dass TraderContext nicht in DI (IOK) Container registriert ist. Bitte stellen Sie sicher, dass Sie sie registrieren.

public class Startup 
{ 
    public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      .AddEnvironmentVariables(); 
     Configuration = builder.Build(); 
    } 

    public IConfigurationRoot Configuration { get; } 

    public void ConfigureServices(IServiceCollection services) 
    { 
     ... 

     services.AddDbContext<TraderContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), 
       // Remove this if you use SQL 2012 or higher. 
       b => b.UseRowNumberForPaging())); 
     ... 
    } 
}  

ich normalerweise die folgenden Gerüst Skripte verwenden Entitäten aus vorhandenen Tabellen zu erzeugen -

Install-Package Microsoft.EntityFrameworkCore.SqlServer 
Install-Package Microsoft.EntityFrameworkCore.Tools 
Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design 

Scaffold-DbContext "Server=SERVER;Database=DATABASE;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 
+0

Sie hatten Recht !!!!! Vielen Dank, ich hatte den Registrierungsprozess übersehen. Jetzt ist die Seite korrekt geladen. Wenn ich jedoch auf den Link Bearbeiten klicke, erhalte ich den Fehler "Seite nicht gefunden". Der Link Bearbeiten ist, was aus dem Gerüst gebaut wird. Irgendeine Idee, was ich hier falsch mache? – Dann055

+0

Könnten Sie bitte eine neue Frage für Link bearbeiten erstellen? Ich bin froh, dass ich dir helfen kann. Wenn diese Antwort die ursprüngliche Frage löst, markieren Sie sie als *** Antwort ***. – Win

+0

Absolut. Vielen Dank. – Dann055

Verwandte Themen