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> )를 기대하는 것으로 보입니다. 매개 변수가없는 생성자를 만들려고 시도했지만 App은 사용할 연결 문자열을 모르기 때문에 중단됩니다. 내 코드는 다음과 같습니다 - 당신은에서 보는 바와 같이 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는 Dependency Injection에 의해 주입됩니다. 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는 합법적입니까? 예, 이유를 알아보십시오.