ASP.NET vNext EF7 Problèmes relatifs à dbContext

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

Question

Je commence un projet vNext et j'ai des problèmes pour le lancer. J'ai ajouté une table à la classe ApplicationDbContext et la table a été créée avec succès dans la base de données (qui dans mon cas est dans Azure). Cependant, je n'arrive pas à instancier correctement un dbContext à utiliser dans mes contrôleurs.

D'après mon expérience de projets ASP.NET EF antérieurs, je pouvais instancier la classe ApplicationDbContext sans lui transmettre de paramètres, mais dans le cas de vNext, il semble toutefois que plusieurs choses IServiceProvider ( IServiceProvider et IOptionsAccessor<DbContextOptions> . J'ai essayé de créer un constructeur sans paramètre, mais l'application se casse car elle ne sait pas quelles chaînes de connexion utiliser. Mon code est au-dessous - comme vous le voyez dans la OnConfiguring(DbContextOptions options) , je force la chaîne de connexion via DbContextOptions , mais ce n'est évidemment pas idéal, et j'ai l'impression de ne pas comprendre où ces deux IServiceProvider , Les paramètres IOptionsAccessor doivent provenir de.

Merci pour toute aide!

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

Réponse acceptée

IServiveProvider et IOptionAccessor sont injectés par l'injection de dépendance. L'ASP.Net Core DI a une limitation. Vous ne pouvez pas avoir plus d'un constructeur.

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




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi