Mysql
 sql >> база данни >  >> RDS >> Mysql

Връзка едно към много между AspNetUsers (идентичност) и персонализирана таблица

Направих точно това в редица проекти

Например имам връзка едно към много от ASPNetUsers до известия. Така че в моя клас ApplicationUser в IdentityModels.cs имам

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

Моят клас Notifications има обратното

public virtual ApplicationUser ApplicationUser { get; set; }

По подразбиране EF ще създаде каскадно изтриване от Notification към AspNetUsers, което не искам - така че аз също имам това в моя Context клас

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

Само не забравяйте, че дефиницията за AspNetUSers е разширена в класа ApplicationUser вътре в IdentityModels.cs, който се генерира за вас чрез скеле на визуални студия. След това го третирайте като всеки друг клас/таблица в приложението си

АКТУАЛИЗАЦИЯ - ето примери за пълни модели

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Сървърът срещна вътрешна грешка или неправилна конфигурация и не можа да изпълни заявката ви

  2. Функция за парола за MySQL

  3. Винаги ли MySQL InnoDB изисква индекс за всяко ограничение за външен ключ?

  4. mysqldump:Получих грешка 32 при запис

  5. UNION заявка с модел на активен запис на codeigniter