sql >> データベース >  >> RDS >> Mysql

AspNetUsers(Identity)とカスタムテーブル間の1対多の関係

    私はこれを多くのプロジェクトで正確に実行しました

    たとえば、ASPNetUsersからNotificationsまで1対多の関係があります。したがって、IdentityModels.cs内のApplicationUserクラスには、

    があります。
    public virtual ICollection<Notification> Notifications { get; set; }
    

    私の通知クラスには逆があります

    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の定義は、VisualStudioのスキャフォールディングによって生成されるIdentityModels.cs内のApplicationUserクラスで拡張されていることを覚えておいてください。次に、アプリ内の他のクラス/テーブルと同じように扱います

    更新-これが完全なモデルの例です

    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. 他のテーブルに存在しない行を選択します

    2. MySQLは、各行に固有の1つのクエリ条件で複数の行を削除します

    3. ベンチマークアーカイブを使用したPostgreSQLテストツールの更新

    4. 自作、MySQL8のサポート