Произошла ошибка при вызове метода BuildWebHost для класса Program.

Когда я запускаю dotnet ef migrations add Initial_Identity, я получаю эту ошибку:

Произошла ошибка при вызове метода BuildWebHost для класса Program. Продолжение без поставщика услуг приложений. Ошибка: GenericArguments1, "Microsoft.AspNetCore.Identity.IdentityRole", на "Microsoft .AspNetCore.Identity.EntityFrameworkCore.UserStore`9[TUser,TRole,TContext,TKey,TUserClaim,TUserRole,TUserLogin,TUserToken,TRoleClaim]’ нарушает ограничение типа «TRole». Операция была сформирована, что может привести к потере данных. Пожалуйста, проверьте правильность переноса.

Как я могу это решить?

Вот мой код:

Стартовый курс:

public void ConfigureServices(IServiceCollection services)
{
    // some codes
    services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
}

Класс программы:

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseDefaultServiceProvider(options => options.ValidateScopes = false)
            .Build();
}

Класс TemporaryDbContextFactory:

public class TemporaryDbContextFactory : 
IDesignTimeDbContextFactory<ApplicationDbContext>
{
    //////// 
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();

        builder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
        return new ApplicationDbContext(builder.Options);
    }
}

Класс ApplicationDbContext:

public class ApplicationDbContext : IdentityDbContext<User, CustomRole, int,   CustomUserClaim, CustomUserRole, CustomUserLogin, CustomRoleClaim,   CustomUserToken>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {

    }

// some codes
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<CustomUserLogin>().HasKey(a => new { a.UserId });
        modelBuilder.Entity<CustomUserRole>().HasKey(a => new { a.RoleId, a.UserId });
        modelBuilder.Entity<CustomUserToken>().HasKey(a => new { a.UserId});
    }

 // some codes

        modelBuilder.Entity<User>().ToTable("User");
        modelBuilder.Entity<CustomRole>().ToTable("Role");
        modelBuilder.Entity<CustomRoleClaim>().ToTable("RoleClaim");
        modelBuilder.Entity<CustomUserClaim>().ToTable("UserClaim");
        modelBuilder.Entity<CustomUserLogin>().ToTable("UserLogin");
        modelBuilder.Entity<CustomUserRole>().ToTable("UserRole");
        modelBuilder.Entity<CustomUserToken>().ToTable("UserToken");

}

Связано с идентификацией:

public class CustomUserLogin : IdentityUserLogin<int> { }
public class CustomUserRole : IdentityUserRole<int> { }
public class CustomUserToken : IdentityUserToken<int> { }
public class CustomRole : IdentityRole<int> { }
public class CustomRoleClaim : IdentityRoleClaim<int> { }
public class CustomUserClaim : IdentityUserClaim<int> { }
public class User : IdentityUser<int> { }

ОШИБКА

ОБНОВЛЕНИЕ 1. Вопрос обновлен!

Согласно ответу Тао, я исправил свой код. Теперь желтая ошибка устранена, но теперь появилась красная ошибка!

Как я могу решить эту ошибку?

Значение не может быть нулевым. Имя параметра: ConnectionString

Значение не может быть нулевым

Содержит файл appsettings.json:

{
  "ConnectionStrings": {
    "DefaultConnection": "Data Source='';initial catalog=Jahan-Beta;User ID=sa;password=''; Persist Security Info=True; Encrypt=False;TrustServerCertificate=False; MultipleActiveResultSets=True"
  }
}

Я также скопировал appsettings.json в каталог \bin\Debug\netcoreapp2.0.


person Said Roohullah Allem    schedule 13.03.2018    source источник


Ответы (1)


Поскольку вы унаследовали ApplicationDbContext от IdentityDbContext<User, CustomRole, int, CustomUserClaim, CustomUserRole, CustomUserLogin, CustomRoleClaim, CustomUserToken>, вы должны использовать CustomRole вместо IdentityRole, пока AddIdentity.

services.AddIdentity<User, CustomRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
person Edward    schedule 13.03.2018
comment
Пожалуйста, ознакомьтесь с обновлением. Я исправил код, но теперь я получаю другую ошибку. - person Said Roohullah Allem; 13.03.2018
comment
После поиска я нашел решение для этого. stackoverflow.com/a/48378259/1817640 - person Said Roohullah Allem; 14.03.2018