2016-07-28 7 views
0

Lange Geschichte, ursprünglich wurde ein Projekt mit Azure AD Auth als Authentifizierung für die Anwendung gestartet, näherte sich dem Ende des Projekts die großen Mängel, die Azure Auth hatte (Normal Benutzer, die sich nicht authentifizieren konnten)Probleme bei der Einrichtung von ASP.Net Role Provider + EF 7

Es wurde also entschieden, von Azure Auth zu ASP Identity Auth zu wechseln. Zu diesem Zweck wurde ein neues Webprojekt erstellt und alle Daten aus dem ersten Projekt wurden in das Projekt eingefügt, indem die Dateien von einem Projekt zum anderen übertragen wurden.

Dies verursachte ein paar Kopfschmerzen, aber schließlich ging alles in Gang. Mit dem neuen Projekt kam es mit einer Migration und ApplicationDBContext bereits zur Bearbeitung aller ASP-Tabellen. Dies war das erste Problem, da wir bereits einen sehr detaillierten DbContext hatten, aber mithilfe der Befehlszeile konnten wir alle Migrationen korrekt ausführen.

Jetzt sind wir mit einer neuen Ausgabe präsentiert, starten Sie jedes Mal, wenn wir die Anwendung in VS2015 die Fehler:

The Error:

InvalidOperationException: Unable to resolve service for type 'Musted.Models.ApplicationDbContext' while attempting to activate 'Microsoft.AspNet.Identity.EntityFramework.UserStore`3[Musted.Models.ApplicationUser,Microsoft.AspNet.Identity.EntityFramework.IdentityRole,Musted.Models.ApplicationDbContext]'.

Ich glaube, das Problem irgendwo in dem Startup.cs ist mit, wie die Identität geschaffen.

Bestehende Kontext: ProjectContext.cs New ASP Auth Context: ApplicationDBContext.cs

Startup.cs <-> Where I believe the issue to be

public void ConfigureServices(IServiceCollection services) 
    { 
      services.AddEntityFramework() 
       .AddSqlServer() 
       .AddDbContext<ProjectContext>(); 
      services.AddScoped<ProjectContextSeedData>(); 

     services.AddIdentity<ApplicationUser, IdentityRole>() 
      .AddEntityFrameworkStores<ApplicationDbContext>() 
      .AddDefaultTokenProviders(); 

     services.AddMvc(); 

     services.AddTransient<IEmailSender, AuthMessageSender>(); 
     services.AddTransient<ISmsSender, AuthMessageSender>(); 
    } 



    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, MusteredContextSeedData seeder) 
    { 
     loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
     loggerFactory.AddDebug(); 

     if (env.IsDevelopment()) 
     { 
      app.UseBrowserLink(); 
      app.UseDeveloperExceptionPage(); 
      app.UseDatabaseErrorPage(); 
     } 
     else 
     { 
      app.UseExceptionHandler("/Home/Error"); 

      try 
      { 
       using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>() 
        .CreateScope()) 
       { 
        serviceScope.ServiceProvider.GetService<ApplicationDbContext>() 
         .Database.Migrate(); 
       } 
      } 
      catch { } 
     } 

     app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); 

     app.UseStaticFiles(); 

     app.UseIdentity(); 

     app.UseMvc(routes => 
     { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 
     }); 
    } 

ApplicationDBContext.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     var connString = Startup.Configuration["Data:ProjectContextConnection"]; 
     optionsBuilder.UseSqlServer(connString); 

     base.OnConfiguring(optionsBuilder); 
    } 

    protected override void OnModelCreating(ModelBuilder builder) 
    { 

     base.OnModelCreating(builder); 
    } 
} 
} 

ProjectContext.cs

public class ProjectContext: DbContext 
{ 
    public ProjectContext() 
    { 
     Database.EnsureCreated(); 
    } 

    public DbSet<User> Users {get; set;} 
    public DbSet<UserLevel> UserLevels { get; set; } 
    public DbSet<ApprovalStatus> ApprovalStatus { get; set; } 
    public DbSet<Area> Areas { get; set; } 
    public DbSet<Company> Company { get; set; } 
    public DbSet<Event> Events { get; set; } 
    public DbSet<LeaveType> LeaveTypes { get; set; } 
    public DbSet<Leave> Leave { get; set; } 
    public DbSet<Shift> Shifts { get; set; } 
    public DbSet<UserLoginAudit> UserLoginAudit { get; set; } 
    public DbSet<UserType> UserType { get; set; } 
    public DbSet<ShiftDay> ShiftDay { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     var connString = Startup.Configuration["Data:ProjectContextConnection"]; 
     optionsBuilder.UseSqlServer(connString); 

     base.OnConfiguring(optionsBuilder); 
    } 


} 

UPDATE

So nach etwas mehr graben, ich habe die Linie im ASP generierten Code gefunden, die fehlschlägt.

private readonly UserManager<ApplicationUser> _userManager; 
//This is the line that is erroring 
var result = await _userManager.CreateAsync(user, model.Password); 

Das nennt, ist alles im ganzen Sachen ASP so dass ich nichts bin zu raten

Antwort

0

Am Ende funktioniert - ich das Projekt gelöscht und die Klassen von Anfang an eingeführt. Ich habe Stunden damit verschwendet, es in die andere Richtung zu bringen, und das neue Projekt war einfach viel schneller.

Verwandte Themen