DotNet Core,沒有為此DbContext配置數據庫提供程序

.net-core c# dbcontext entity-framework-core linq

我想使用簡單的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創建新實例時調用的構造函數。我知道對於某些人來說這是問題,我希望它有所幫助。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow