簡體   English   中英

多對多關系 EF Core 5.0.3

[英]Many to many relationships EF Core 5.0.3

我需要為我自己的站點復制不和諧用戶 model 並且規則是。

一個用戶可以是多個俱樂部的一部分這些俱樂部中的每個用戶都可以具有管理員或管理員的角色。

到目前為止,我有網站范圍的角色在工作,但不在俱樂部實體內,我無法將我的俱樂部與用戶聯系起來

這就是我目前使用的 ef core 5.0.3,如果這有所作為的話。

應用用戶Model

public class ApplicationUser : IdentityUser
{
    public enum UserTypeEnum
    {
        Guest=0,
        User=1,
        Author=2,
        AddonOwner=3,
        GroupOwner=5,
        ClubMember=6,
        ClubAdmin=7,
        SuperAdmin=199,
        BandUser=999
    }
    public string? FirstName { get; set; }
    public string? LastName { get; set; }
    public string? GamerTag { get; set; }
    public bool? isOnline { get; set; }
    public int? UserType { get; set; }
    public Guid? TennantId { get; set; }
    public Guid? ClubId { get; set; }

    public List<Badges>? Badges { get; set; }

    public List<Club>? Clubs { get; set; }

}

然后在我的俱樂部里,我有

public  class Club
{

    public int Id { get; set; }
    public Guid? TeannatId { get; set; }
    public Guid? ClubId { get; set; }
    public Guid? UserId { get; set; }
    public string? Name { get; set; }       
    public string? Description { get; set; }
    public string? Url { get; set; }
    public int? ClubLikes { get; set; }
    public int? ClubDislikes { get; set; }
    public int? MembersCount { get; set; }
    public string? Logo { get; set; }
    public List<Flight>? Flights { get; set; }
    public string? ThumbNail { get; set; }
    public DateTimeOffset? GpdrRemoveRequestDate { get; set; }
    public bool? isGpdrRemoveRequest { get; set; }
    public DateTimeOffset? BannedTime { get; set; }
    public TimeSpan? BanPeriod { get; set; }
    public bool? isBanned { get; set; }
    public bool? isActive { get; set; }
    public bool? isDeleted { get; set; }
    public DateTime? CreatedDate { get; set; }
    public string? CreatedBy { get; set; }
    public  List<ApplicationUser>? Members { get; set; }
}

到目前為止我試過這個

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Club>().Property(x => x.ClubId).HasDefaultValueSql("NEWID()");
        modelBuilder.Entity<IdentityRole>().HasData(new IdentityRole { Name = "Admin", NormalizedName = "Admin".ToUpper() });
        modelBuilder.Entity<ApplicationUser>()
            .HasOne<Club>()
            .WithMany(m => m.Members)
            .HasForeignKey(a => a.ClubId)
            .HasPrincipalKey(c => c.ClubId);
    }

但它只給了我一個管理員用戶,而不是俱樂部中的角色。 俱樂部的映射只允許每個成員一個俱樂部,當他們可能是多個俱樂部的一部分時,它與 discord 的原理完全相同,其中頻道是俱樂部,用戶可以是模組或普通用戶。

然后在我看來我要回來了。

 var club = await _context.Clubs.Include(c =>c.Members).ToListAsync();
 return View(club);

我希望看到每個俱樂部有很多成員,但每個成員在任期內可能屬於不同的俱樂部多次

編輯 2 仍然存在問題

我仍然從下面的人那里得到零計數我的俱樂部用戶的答案是我必須配置的其他東西

在此處輸入圖像描述

您需要一個表用於俱樂部和用戶之間的關聯,以允許用戶屬於多個俱樂部。 在該表下,您可以定義該特定俱樂部的用戶角色。

public class ClubMember
{ 
    public string UserId {get;set;} 
    public int ClubId {get; set;} 
    public ApplicationUser User {get; set;} 
    public Club Club {get; set;} 
    public string RoleId {get;set;} 
    public IdentityRole Role {get; set;} 
} 

刪除List<Club> Clubs {get; set;} List<Club> Clubs {get; set;}從 ApplicationUser 中刪除List<ApplicationUser> Members {get;set;}Club

然后您可以將以下屬性添加到ApplicationUserClub

public class ApplicationUser : IdentityUser
{
   public virtual List<ClubMember> ClubMembers{get;set;} 
} 
public class Club
{
   public virtual List<ClubMember> ClubMembers{get;set;} 
}

更新

要將俱樂部分配給用戶,您必須這樣做;

var clubmember = new ClubMember {UserId = userId, ClubId = clubId, RoleId = roleId};
_context.ClubMembers.Add(clubmember);
await _context.SaveChangesAsync();

例如,要查詢 ID = 7 的俱樂部中的所有成員,您可以這樣做;

var membersInClub = _context.ClubMembers.Include(c => c.User).Where(c => c.ClubId == 7).Select(c => c.User);

查詢所有俱樂部及其會員

var clubs = _conext.Clubs.Include(c.ClubMembers);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM