Mysql
 sql >> Base de données >  >> RDS >> Mysql

Relation un à plusieurs entre AspNetUsers (identité) et une table personnalisée

J'ai fait exactement cela sur un certain nombre de projets

Par exemple, j'ai une relation un à plusieurs entre ASPNetUsers et Notifications. Donc, dans ma classe ApplicationUser à l'intérieur de IdentityModels.cs, j'ai

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

Ma classe Notifications a l'inverse

public virtual ApplicationUser ApplicationUser { get; set; }

Par défaut, EF créera alors une suppression en cascade de Notification à AspNetUsers, ce que je ne veux pas - donc j'ai aussi ceci dans ma classe Context

modelBuilder.Entity<Notification>()
    .HasRequired(n => n.ApplicationUser)
    .WithMany(a => a.Notifications)
    .HasForeignKey(n => n.ApplicationUserId)
    .WillCascadeOnDelete(false);

N'oubliez pas que la définition de AspNetUSers est étendue dans la classe ApplicationUser à l'intérieur de IdentityModels.cs qui est générée pour vous par l'échafaudage Visual Studios. Ensuite, traitez-le comme n'importe quelle autre classe/table de votre application

MISE À JOUR - voici des exemples de modèles complets

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; }

}

}