ASP.NET vNext EF7 dbContext問題

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

我正在啟動一個vNext項目,我正在解決一些問題。我已經在ApplicationDbContext類中添加了一個表,它在db中成功創建了表(在我的例子中是在Azure中)。但是,我似乎無法正確實例化我的控制器中使用的dbContext

根據我以前的ASP.NET EF項目的經驗,我可以實例化ApplicationDbContext類而不傳遞任何參數,但是在vNext的情況下,它似乎期待許多事情( IServiceProviderIOptionsAccessor<DbContextOptions> )。我已經嘗試創建一個無參數的構造函數,但是由於不知道要使用哪個連接字符串而導致應用程序中斷。我的代碼如下 - 正如您在OnConfiguring(DbContextOptions options)覆蓋中看到的OnConfiguring(DbContextOptions options) ,我通過DbContextOptions強制連接字符串,但這顯然不理想,我覺得我只是不明白那兩個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是由依賴注入註入的,ASP.Net Core DI有限制,你不能有多個構造函數。

閱讀本文: http//blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx




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