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合法吗? 是的,了解原因