データベースプロバイダは設定されていませんEF7

asp.net-core asp.net-core-mvc c# entity-framework entity-framework-core

質問

Entity Framework 7とMVC6を使用しているときにこのエラーメッセージが表示されるようです

System.InvalidOperationExceptionデータベースプロバイダーが構成されていません。 DbContextクラスのOnConfiguringまたはサービスの設定時にAddDbContextメソッドをオーバーライドして、データベースプロバイダを構成します。

私は私がやっているはずのすべてをやったと信じています。だからバグかもしれません。私は、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をチェックして、有効な接続を返しています。私はまた、オブジェクトが注入されていることを私のサービスでチェックしました。それはヌルではないので、すべて動作するはずです。

私のconfig.jsonファイルは次のようになります

{
    "Data": {
        "MyConnection": {
            "ConnectionString": "Server=(local);Database=XXXX;Trusted_Connection=True;"
        }
    }
}

私のDbContextはOnConfiguringメソッドをオーバーライドしません。なぜなら、上記のようにすべてをやっているので、私はそれが必要ではないと信じているからです。私は正しい?私は何が欠けていますか?いくつかのメソッドが存在せず、他のウェブサイトが同じものを持っているので、いくつかの古いコードを使用していると思います。

受け入れられた回答

以下に示すMyDbContextをセットアップして、Startup.cs AddDbContext()呼び出しで定義されたoptionsパラメーターを注入します。

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

これにより、コンフィグレーション(config.json)からメソッド呼び出しオプションに接続文字列を渡すことができます.UseSqlServer()

services.AddEntityFramework()
    .AddSqlServer()
    .AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"]));

ソリューションを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)
    {
        ...
    }
}


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ