繁体   English   中英

DotNet Core,没有为此DbContext配置数据库提供程序

[英]DotNet Core , No database provider has been configured for this DbContext

我想使用简单的LINQ命令从我的表“Header”中选择数据,但我遇到了错误。

我的行动

    public HeaderModel GetHeaderInformation()
    {
        using(var context = new ApplicationDbContext())
        {
            var header = context.Headers.Select(x => new HeaderModel
            {
                colorCode = x.colorCode,
                height = x.height,
                Id = x.Id,
                left = x.left,
                top = x.top,
                width = x.width
            }).FirstOrDefault();

            return header;
        }
    }

错误

附加信息:尚未为此DbContext配置数据库提供程序。 可以通过覆盖DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。 如果使用AddDbContext,那么还要确保您的DbContext类型在其构造函数中接受DbContextOptions对象,并将其传递给DbContext的基础构造函数。

我的ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public ApplicationDbContext() : base() { }

    public DbSet<Header> Headers { get; set; }
    public DbSet<Menu> Menus { get; set; }
}

我的Startup.cs

        services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        services.AddApplicationInsightsTelemetry(Configuration);
        services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
        services.AddMvc();

提前致谢。

您正在使用依赖注入。 services.AddDbContext负责创建一个DbContext对象。 使用块是没有意义的,因为通过这样做,您实例化了一个没有连接字符串的新ApplicationDbContext。


写这样的方法:

public HeaderModel GetHeaderInformation(ApplicationDbContext context)
{
    // the code inside your using block
}

和.Net将通过依赖注入来解决上下文。



此外,通常的做法是将DbContext作为构造函数类中的私有只读属性。 所以你可能想要做这样的事情:

public class MyConroller : Controller
{
    private readonly MyDbContext _context;

    public MyConroller(MyDbContext ctx)
    {
        _context = ctx;
    }
}

并在您的方法中使用上下文属性。

您应该删除无参数构造函数,因为它可能是在DI创建新实例时调用的构造函数。 我知道对于某些人来说这是问题,我希望它有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM