没有任何参数对应于所需的形式参数“选项”

问题描述:

我正在使用.Net核心中的第一个应用程序。没有任何参数对应于所需的形式参数“选项”

我得到这个生成错误因为某些原因:

Error CS7036 There is no argument given that corresponds to the required formal parameter 'options' of 'LakeViewContext.LakeViewContext(DbContextOptions<LakeViewContext>)' LakeView 

我没能找到通过谷歌搜索或MS文档的解决方案。

我的上下文类:

using LakeView.Models; 
using Microsoft.EntityFrameworkCore; 

namespace LakeView 
{ 
    public class LakeViewContext : DbContext 
    { 
     public LakeViewContext(DbContextOptions<LakeViewContext> options) : base(options) 
     { 

     } 

     public DbSet<HTMLElement> HTMLElements { get; set; } 
     public DbSet<CustomizedElement> CustomizedElements { get; set; } 
     public DbSet<TemplateFileType> TemplateFileTypes { get; set; } 
     public DbSet<StyleFile> StyleFiles { get; set; } 
     public DbSet<Template> Templates { get; set; } 
     public DbSet<Course> Courses { get; set; } 
     public DbSet<Page> Pages { get; set; } 
     public DbSet<HTML> HTMLs { get; set; } 
     public DbSet<Comment> Comments { get; set; } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<CustomizedElementTemplate>() 
       .HasKey(s => new { s.CustomizedElementId, s.TemplateId }); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 
} 

控制器类:

using LakeView.Models; 
using LakeView.Models.ViewModels; 
using Microsoft.AspNetCore.Mvc; 
using System.Collections.Generic; 
using System.Linq; 

namespace LakeView.Controllers 
{ 
    public class CoursesController : Controller 
    { 

     private LakeViewContext db = new LakeViewContext(); 

     public IActionResult Index() 
     { 
      ICollection<Course> courses = db.Courses.ToList(); 
      return View(courses); 
     } 

     [HttpGet] 
     public IActionResult CreateCourse() 
     { 
      return View("CreateCourse"); 
     } 

     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public IActionResult CreateCourse(CreateCourseViewModel courseVM) 
     { 
      if (ModelState.IsValid) 
      { 
       Course newCourse = new Course() 
       { 
        CourseCode = courseVM.CourseCode, 
        CourseTitle = courseVM.CourseTitle, 
        MasterOU = int.Parse(courseVM.MasterOU) 
       }; 

       db.Courses.Add(newCourse); 
       db.SaveChanges(); 

       return RedirectToAction("Index"); 

      } 
       return View("CreateCourse", courseVM); 
     } 
    } 
} 

(粗体文本在Visual Studio中强调了与相同的错误

“私人LakeViewContext DB =新LakeViewContext ();“

启动类别:

using Microsoft.AspNetCore.Builder; 
using Microsoft.AspNetCore.Hosting; 
using Microsoft.EntityFrameworkCore; 
using Microsoft.Extensions.DependencyInjection; 
using Microsoft.Extensions.Logging; 
using LakeView.Models; 

namespace LakeView 
{ 
    public class Startup 
    { 
     // This method gets called by the runtime. Use this method to add services to the container. 
     // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddMvc(); 
      var connection = @"Data Source = (localdb)\MSSQLLocalDB; Database = LakeViewData; Trusted_Connection = True;"; 
      services.AddDbContext<LakeViewContext>(options => options.UseSqlServer(connection)); 
     } 

     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
     { 
      //loggerFactory.AddConsole(); 

      if (env.IsDevelopment()) 
      { 
       app.UseDeveloperExceptionPage(); 
      } 
      app.UseStaticFiles(); 

      app.UseMvcWithDefaultRoute(); 
     } 
    } 
} 

LakeViewContext需要一个DbContextOptions<LakeViewContext>被传递给它的构造函数。但是,您呼叫的构造不提供任何内容:

private LakeViewContext db = new LakeViewContext(); 

为了解决这个问题,你可以插入到您所设置的依赖注入系统。 - 只需使用

public class CoursesController : Controller 
{ 
    private readonly LakeViewContext db; 

    public CoursesController(LakeVieContext db) 
    { 
     this.db = db; 
    } 

    ... 

的ASP.NET核心依赖注入系统将为您提供在构造一个LakeViewContext:要做到这一点,如下更改您的控制器。

您正试图在控制器中更新dbcontext而不传入选项。

而应该添加一个构造函数来你的控制器,并添加的DbContext到您的构造函数,因此它会被注入,即

public CoursesController(LakeViewContext dbContext) 
{ 

    db = dbContext; 

} 
private LakeViewContext db; 
... the rest of your code 

依赖注入将它传递到你