没有为此DbContext配置数据库提供程序-ASP.Net Core 2.1

时间:2018-11-22 08:06:36

标签: c# entity-framework asp.net-core dependency-injection

我遇到以下错误:

  

InvalidOperationException:没有为此DbContext配置数据库提供程序。可以通过重写DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。如果使用AddDbContext,则还请确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基本构造函数。

Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    services.AddDistributedMemoryCache();
    services.AddSession(options=>{options.IdleTimeout = TimeSpan.FromMinutes(1);});services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options =>
        {
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(20);
            options.Cookie.Name = "SampleCore";
            options.LoginPath = "/log-in";
            //options.AccessDeniedPath = "/access-denied";
            options.LogoutPath = "/log-off";
            options.ReturnUrlParameter = "postBack";
        });
    services.AddMvc(options =>
        {
            options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
        }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    string connection = Configuration.GetConnectionString("MyConnection");
    services.AddDbContext<EmployeeContext>(options => options.UseSqlServer(connection), ServiceLifetime.Scoped);   
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseSession();
    app.UseCookiePolicy();
    app.UseAuthentication();
    app.UseCustomErrorPages();
    app.UseMvc();
}

UseCustomErrorPages扩展名:

public async Task Invoke(HttpContext context)
    {
        await _next(context); // Getting error at this line
        if (context.Response.StatusCode == 404 && !context.Response.HasStarted)
        {
            string originalPath = context.Request.Path.Value;
            context.Items["originalPath"] = originalPath;
            context.Request.Path = "/page-not-found";
            await _next(context);
        }
        else if (context.Response.StatusCode == 500)
        {
            string originalPath = context.Request.Path.Value;
            context.Items["originalPath"] = originalPath;
            context.Request.Path = "/error";
            await _next(context);
        }
        else if(context.Response.StatusCode == 401)
        {
            string originalPath = context.Request.Path.Value;
            context.Items["originalPath"] = originalPath;
            context.Request.Path = "/access-denied";
            await _next(context);
        }
    }

DbContext:

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

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            var connectionString = "connectionString";
            optionsBuilder.UseSqlServer(connectionString);
            base.OnConfiguring(optionsBuilder);
        }
    }

    public virtual DbSet<TblEmployee> TblEmployee { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //Code
    }
}

csproj文件:

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.1.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.4">
  <PrivateAssets>all</PrivateAssets>
  <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.6" />

控制器:

private EmployeeContext _context;
public HomeController(EmployeeContext context)
{
    _context = context;
}
public List<TblEmployee> GetEmployees
{
   List<TblEmployee> getEmployees = _context.TblEmployee.ToList();
   return getEmployees ;
}

appsettings.json:

{
  "Logging": {
  "LogLevel": {
  "Default": "Warning"
  }
 },
"ConnectionStrings": {
"MyConnection": "connection string"
},
"AllowedHosts": "*"
}

我不知道我做错了什么。请帮助

0 个答案:

没有答案