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