Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Relacionamento um para muitos entre AspNetUsers (Identidade) e uma tabela personalizada


Eu fiz exatamente isso em vários projetos

Por exemplo, eu tenho um relacionamento de um para muitos de ASPNetUsers para Notificações. Então, na minha classe ApplicationUser dentro de IdentityModels.cs eu tenho
public virtual ICollection<Notification> Notifications { get; set; }

Minha classe Notificações tem o inverso
public virtual ApplicationUser ApplicationUser { get; set; }

Por padrão, o EF criará uma exclusão em cascata de Notificação para AspNetUsers que eu não quero - então eu também tenho isso na minha classe de contexto
modelBuilder.Entity<Notification>()
    .HasRequired(n => n.ApplicationUser)
    .WithMany(a => a.Notifications)
    .HasForeignKey(n => n.ApplicationUserId)
    .WillCascadeOnDelete(false);

Apenas lembre-se de que a definição para AspNetUSers é estendida na classe ApplicationUser dentro de IdentityModels.cs que é gerada para você pelo visual studios scaffolding. Em seguida, trate-o como qualquer outra classe/tabela em seu aplicativo

ATUALIZAÇÃO - aqui estão exemplos de modelos completos
public class ApplicationUser : IdentityUser
{

    [StringLength(250, ErrorMessage = "About is limited to 250 characters in length.")]
    public string About { get; set; }

    [StringLength(250, ErrorMessage = "Name is limited to 250 characters in length.", MinimumLength=3)]
    public string Name { get; set; }

    public DateTime DateRegistered { get; set; }
    public string ImageUrl { get; set; }

    public virtual ICollection<Notification> Notifications { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    }
}


public class Notification
{
    public int ID { get; set; }

    public int? CommentId { get; set; }

    public string ApplicationUserId { get; set; }

    public DateTime DateTime { get; set; }

    public bool Viewed { get; set; }

    public virtual ApplicationUser ApplicationUser { get; set; }

    public virtual Comment Comment { get; set; }

}

}