设置ASP.Net角色提供程序+ EF 7的问题

时间:2016-07-28 04:42:52

标签: c# asp.net asp.net-mvc entity-framework

很长一段时间,最初一个项目是使用Azure AD auth作为应用程序的身份验证启动的,接近项目结束时我们注意到Azure auth有(普通用户无法进行身份验证)的巨大漏洞

因此决定从Azure身份验证转移到ASP身份验证。为此,创建了一个新的Web项目,并通过将文件从一个项目复制到另一个项目,将第一个项目中的所有数据放入其中。

这引起了一些令人头疼但最终一切都进行了。随着新项目的推出,它已经有了一个Migration和 ApplicationDBContext 来处理所有的ASP表。这是第一个问题,因为我们已经有了非常详细的 DbContext ,但是使用命令行我们设法正确运行了所有迁移。

现在我们遇到一个新问题,每次我们在 VS2015 中启动应用程序时出现错误:

  

错误:

     

InvalidOperationException:无法解析类型' Musted.Models.ApplicationDbContext'尝试激活' Microsoft.AspNet.Identity.EntityFramework.UserStore`3 [Musted.Models.ApplicationUser,Microsoft.AspNet.Identity.EntityFramework.IdentityRole,Musted.Models.ApplicationDbContext]'。

我认为问题出在 Startup.cs 的某个地方,以及如何创建身份。

现有上下文: ProjectContext.cs 新ASP验证上下文: ApplicationDBContext.cs

  

Startup.cs< - >我认为问题在哪里

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


}

更新

因此,经过一些挖掘,我发现ASP生成的代码中的行失败了。

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

那些调用都是整个ASP的东西,所以我猜不会有什么工作

1 个答案:

答案 0 :(得分:0)

最后 - 我删除了项目并从一开始就导入了这些类。我浪费了几个小时试图让它以另一种方式工作,新项目更快。