在.net core 2类库中迁移Identity

时间:2017-10-21 21:56:15

标签: asp.net-identity class-library asp.net-core-2.0

我一直在尝试将一个带有Identity的类库添加到.net core 2项目中。

项目Startup.cs

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddIdentity<MyDbContext, IdentityRole>()
            .AddEntityFrameworkStores<MyDbContext>()
            .AddDefaultTokenProviders();

        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {

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

        app.UseStaticFiles();

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

类库:

namespace MSContext
{
    public class MyDbContextFactory : IDesignTimeDbContextFactory<MyDbContext>
    {
        public MyDbContext CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<MyDbContext>();
            builder.UseSqlServer(connectionString);
            return new MyDbContext(builder.Options);
        }
    }

    public class MyDbContext: IdentityDbContext<ApplicationUser>
    {
        public MyDbContext(DbContextOptions<MyDbContext> options)
            : base(options)
        {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(connectionString);
        }




        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

        }
}

类库ApplicationUser.cs

public class ApplicationUser : IdentityUser
{

}

当我尝试使用Add-Migration

进行迁移时

我收到此错误:

  

在类上调用方法'BuildWebHost'时发生错误   '程序'。继续没有应用程序服务提供商。错误:   AddEntityFrameworkStores只能与派生的用户一起调用   来自IdentityUser。

当我搜索此错误时,我不断收到有关自定义身份模型的问题,但这不是我的情况。我只是想按原样迁移它。我错过了什么?

1 个答案:

答案 0 :(得分:0)

发现问题。我使用AddIdentity<>错了。 应该使用ApplicationUser代替MyDbContext。 这是更正后的版本:

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