sql >> Database >  >> RDS >> Mysql

Een-op-veel-relatie tussen AspNetUsers (Identity) en een aangepaste tabel

Ik heb precies dit gedaan bij een aantal projecten

Ik heb bijvoorbeeld een een-op-veel-relatie van ASPNetUsers tot meldingen. Dus in mijn ApplicationUser-klasse binnen IdentityModels.cs heb ik

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

Mijn Notifications-klasse heeft het omgekeerde

public virtual ApplicationUser ApplicationUser { get; set; }

Standaard zal EF dan een cascade-verwijdering maken van Notification naar AspNetUsers die ik niet wil - dus ik heb dit ook in mijn Context-klasse

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

Onthoud dat de definitie voor AspNetUSers is uitgebreid in de ApplicationUser-klasse binnen IdentityModels.cs die voor u wordt gegenereerd door Visual Studios-steigers. Behandel het dan als elke andere klas/tafel in je app

UPDATE - hier zijn voorbeelden van volledige modellen

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

}

}



  1. Wat is het verschil tussen 'YYYY' en 'RRRR' in Oracle SQL?

  2. Is het vreemd dat mijn SQLAlchemy MySQL-verbinding altijd slaapt?

  3. Hoe kan ik een SELECT DISTINCT uitvoeren op alle velden behalve een BLOB?

  4. 60 miljoen inzendingen, selecteer inzendingen uit een bepaalde maand. Hoe database optimaliseren?