Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mối quan hệ một đến nhiều giữa AspNetUsers (Identity) và một bảng tùy chỉnh

Tôi đã thực hiện chính xác điều này trên một số dự án

Ví dụ, tôi có một mối quan hệ từ một đến nhiều từ ASPNetUsers đến Notifications. Vì vậy, trong lớp ApplicationUser bên trong IdentityModels.cs, tôi có

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

Lớp Thông báo của tôi ngược lại

public virtual ApplicationUser ApplicationUser { get; set; }

Theo mặc định, EF sau đó sẽ tạo xóa theo tầng từ Thông báo tới AspNetUsers mà tôi không muốn - vì vậy tôi cũng có điều này trong lớp Ngữ cảnh của mình

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

Chỉ cần nhớ định nghĩa cho AspNetUSers được mở rộng trong lớp ApplicationUser bên trong IdentityModels.cs được tạo cho bạn bởi giàn giáo studio trực quan. Sau đó, coi nó như bất kỳ lớp / bảng nào khác trong ứng dụng của bạn

CẬP NHẬT - đây là ví dụ về các mô hình đầy đủ

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. Giá trị chuỗi không chính xác:'\ xF0 \ x9F \ x8E \ xB6 \ xF0 \ x9F ...' MySQL

  2. Làm cách nào để nhận giá trị SQL_CALC_FOUND_ROWS bằng cách sử dụng các câu lệnh đã chuẩn bị?

  3. CẢNH BÁO SqlExceptionHelper:143 - Lỗi SQL:0, SQLState:08S01- SqlExceptionHelper:144 - Lỗi liên kết truyền thông

  4. Các giao dịch lồng nhau có được phép trong MySQL không?

  5. Quyền truy cập bị từ chối đối với người dùng 'www-data' @ 'localhost - làm thế nào để đối phó với điều đó?