ASP.NET vNext EF7 dbContextの問題

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

質問

私はvNextプロジェクトを開始しています。私はいくつか問題を抱えて地面から蹴っています。私はApplicationDbContextクラスにテーブルを追加し、それは正常にデータベース(私の場合はAzureにある)のテーブルを作成しました。しかし、私は正しく私のコントローラで使用するdbContextをインスタンス化するように見えることはできません。

以前のASP.NET EFプロジェクトでの私の経験では、パラメータを渡すことなくApplicationDbContextクラスをインスタンス化できましたが、vNextの場合、多くのもの( IServiceProviderIOptionsAccessor<DbContextOptions> )が必要です。パラメータなしのコンストラクタを作成しようとしましたが、使用する接続文字列がわからないためにアプリケーションが中断します。私のコードは以下の通りです - OnConfiguring(DbContextOptions options)オーバーライドで見られるように、私はDbContextOptions経由で接続文字列を強制しますが、それは明らかに理想的ではありません、そして、私はちょうどそれら2つのIServiceProviderとIOptionsAccessorのパラメータが必要です。

助けてくれてありがとう!

namespace Project.Models
{
    // Add profile data for application users by adding properties to the ApplicationUser class
    public class ApplicationUser : IdentityUser
    {
        public string CompanyName { get; set; }
    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
        private static bool _created = false;

        public DbSet<Business> Businesses { get; set; }

        public ApplicationDbContext()
            : base()
        {
            if (!_created)
            {
                Database.EnsureCreated();
                _created = true;
            }
        }

        protected override void OnConfiguring(DbContextOptions options)
        {
            var configuration = new Configuration();
            configuration.AddJsonFile("config.json");
            configuration.AddEnvironmentVariables();
            options.UseSqlServer(configuration.Get("Data:DefaultConnection:ConnectionString"));
        }

        public ApplicationDbContext(IServiceProvider serviceProvider, IOptionsAccessor<DbContextOptions> optionsAccessor)
            : base(serviceProvider, optionsAccessor.Options)
        {            
            // Create the database and schema if it doesn't exist
            // This is a temporary workaround to create database until Entity Framework database migrations 
            // are supported in ASP.NET vNext
            if (!_created)
            {
                Database.EnsureCreated();
                _created = true;
            }
        }
    }
}

受け入れられた回答

IServiveProviderとIOptionAccessorはDependency Injectionによって注入されます。ASP.Net Core DIには制限があります。複数のコンストラクタを持つことはできません。

この記事を読む: http : //blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx



Related

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