ASP.NET vNext Problemi con EF7 dbContext

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

Domanda

Sto avviando un progetto vNext e sto riscontrando alcuni problemi che lo fanno partire. Ho aggiunto una tabella alla classe ApplicationDbContext e ha creato correttamente la tabella nel db (che nel mio caso è in Azure). Tuttavia, non riesco a dbContext un'istanza corretta di dbContext da utilizzare nei miei controller.

Nella mia esperienza con precedenti progetti EF di ASP.NET, ho potuto creare un'istanza della classe ApplicationDbContext senza passare alcun parametro, ma nel caso di vNext, tuttavia, sembra aspettarsi un certo numero di cose ( IServiceProvider e IOptionsAccessor<DbContextOptions> ). Ho provato a creare un costruttore senza parametri, ma l'app si interrompe per non sapere quali stringhe di connessione utilizzare. Il mio codice è sotto - come si vede nel OnConfiguring(DbContextOptions options) override, forzare la stringa di connessione in tramite DbContextOptions , ma ovviamente non è l'ideale, e mi sento come se non stavo solo capendo dove quei due IServiceProvider , e IOptions I parametri dell'Accessor devono venire.

Grazie per qualsiasi aiuto!

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;
            }
        }
    }
}

Risposta accettata

IServiveProvider e IOptionAccessor sono iniettati dall'Iniezione delle dipendenze, mentre il DI di ASP.Net Core ha delle limitazioni, non è possibile avere più di un costruttore.

Leggi questo: http://blogs.msdn.com/b/webdev/archive/2014/06/17/dependency-injection-in-asp-net-vnext.aspx



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché