Compreendendo os principais pontos de identidade do Asp.Net

Eu sou um desenvolvedor do Asp.net, mas muito novo na estrutura de identidade do Asp.net. Estudei o aplicativo de exemplo e também segui alguns tutoriais sobre identidade, mas ainda não sou capaz de entender o conceito completamente. Eu tenho um controle muito firme sobre a associação ao Asp.net, mas a identidade não se parece em nada com a associação. Vou explicar o que fiz até agora.

Estou criando um aplicativo simples no qual estou seguindo a primeira abordagem de código. Eu criei o modelo de entidade para o usuário que herda de IdentityUser e tem alguns campos extras. Abaixo está o modelo de entidade para o usuário.

public class User : IdentityUser
{
    public int? CompanyID { get; set; }

    public bool? CanWork { get; set; }

    public bool? CanSearch { get; set; }

    public Company Company { get; set; }
}

Agora, nos exemplos, as pessoas usam o nome ApplicationUser, mas para meu próprio propósito, usei o nome User. Também existe um método no modelo User ou ApplicationUser que é,

public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User> manager)
    {
        CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }

Não consigo entender o objetivo deste método. Também a partir de um exemplo, usei o seguinte modelo para Função,

public class Role : IdentityRole
{
    public Role()
    {

    }

    public Role(string roleName, string description)
        : base(roleName)
    {
        this.Description = description;
    }

    public string Description { get; set; }
}

Entendo que um campo extra foi adicionado, mas não consigo entender o objetivo do construtor sobrecarregado.

As confusões acima mencionadas são secundárias. Minha principal confusão é que eu sei que, quando crio modelos de entidade, uso DbSet e DbContext e quando chamo qualquer método de estrutura de entidade para acessar o banco de dados, o banco de dados é criado / descartado, independentemente do esquema que estou seguindo.

Em Identity, qual método é responsável por criar as tabelas de Identidades no banco de dados? Eu tenho um arquivo IdentityConfig no qual declaro ApplicationUserManager e ApplicationSignInManager. Eu também tenho um arquivo de inicialização. Anteriormente, eu tinha apenas um arquivo de inicialização na pasta App_Start e, quando executo o aplicativo e tentei acessar qualquer método de identidade, ele me deu um erro e não estava criando banco de dados. Em seguida, tornei a classe parcial e criei outra classe parcial com o mesmo nome na raiz e a exceção desapareceu e as tabelas foram criadas. Então, a classe Startup é responsável pela criação de tabelas de identidade? Existem colunas extras criadas automaticamente nos usuários do AspNet, como PhoneNumber, PhoneNumberConfirmed, TwoFactorEnabled. Eu não preciso dessas colunas extras. Posso removê-los? Posso alterar os nomes das tabelas de identidade criadas?

Eu sei que essas são perguntas muito básicas e nenhuma pergunta, mas se eu não conseguisse encontrar algum tutorial ou exemplo básico para iniciantes, seria muito benéfico. O que eu encontrei está descrevendo aquelas coisas que eu não preciso ou me fazendo confundir. Quero entender e controlar como o Identity deve funcionar no meu aplicativo, mas até agora parece-me que nem estou entendendo completamente e nem sendo capaz de fazer é ajustável às minhas necessidades. Seus tutoriais e exemplo estão me ensinando a fazer frases, mas não consigo entender os alfabetos. :(

questionAnswers(1)

yourAnswerToTheQuestion