使用Entity Framework 7和MVC6時,我似乎收到此錯誤消息

System.InvalidOperationException未配置任何數據庫提供程序。在設置服務時,通過在DbContext類或AddDbContext方法中覆蓋OnConfiguring來配置數據庫提供程序。

我相信我已經做了我應該做的一切,所以也許它是一個錯誤。我使用的是Entity Framework的7.0.0-beta7版本。

我已經設置了我的DbContext,一個接口,所以我可以模擬DbContext(在EntityFramework 6中需要進行單元測試)。我的服務將接口作為構造函數,我在MVC 6中設置了DI。

在我的Startup.cs文件中,我有以下內容

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

我已經檢查了我的connectionString,並且返回了一個有效的連接。我還檢查了我的服務,正在註入該對象,並且它不是null,因此應該全部工作。

我的config.json文件看起來像這樣

public void ConfigureServices(IServiceCollection services)
{
    // entity framework
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<MyDbContext>(options =>
            options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])
        );

    // Add MVC services to the services container.
    services.AddMvc();

    // new context on each request
    services.AddScoped<IMyDbContext, MyDbContext>();
}

我的DbContext沒有覆蓋OnConfiguring方法,因為我認為不需要它,因為我正如上所述那樣做?我對嗎?我錯過了什麼?看了很多不同的網站,我猜有些人正在使用舊代碼,因為有些方法不存在,而其他網站與我擁有的相同。

一般承認的答案

設置下面顯示的MyDbContext以注入Startup.cs AddDbContext()調用中定義的options參數。

public MyDbContext(DbContextOptions options)
: base(options)
{ }

這將允許您將連接字符串從Configuration(config.json)傳遞到方法調用options.UseSqlServer()

public MyDbContext(DbContextOptions options)
: base(options)
{ }

當我不得不將我的解決方案拆分為單獨的項目Web,BL和DAL時,我遇到了同樣的問題。


熱門答案

我相信您在嘗試從數據庫訪問某些數據的行上遇到此錯誤。您可以通過配置上下文來解決此問題。只需覆蓋OnConfiguring方法即可。

public class MyDbContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        options.UseSqlServer("<your connection string>");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        ...
    }
}



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因