很长一段时间,最初一个项目是使用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的东西,所以我猜不会有什么工作
答案 0 :(得分:0)
最后 - 我删除了项目并从一开始就导入了这些类。我浪费了几个小时试图让它以另一种方式工作,新项目更快。