You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6中如何实现用户表的多对多赞助关系

实现用户间多对多赞助关系的修改方案

当前配置使用WithOne导致仅能建立一对一关联,要实现赞助人可关联多名学生、学生可关联多名赞助人的多对多关系,需按以下步骤调整实体类与EF Core配置:

1. 修改Users实体类

将原有的单个Sponsors属性替换为集合属性,分别对应用户作为赞助人的所有赞助关系、作为被赞助人的所有赞助关系:

public class Users : IdentityUser
{
    // 原有属性保持不变...

    // 替换原Sponsor1、Sponsor2属性
    public ICollection<Sponsors> SponsoredUsers { get; set; } = new List<Sponsors>();
    public ICollection<Sponsors> SponsorsOfUser { get; set; } = new List<Sponsors>();

    // 其余原有属性...
    public string? RefreshToken { get; set; }
    public DateTime RefreshTokenExpiryTime { get; set; }
}

2. 保留Sponsors实体类(无需修改)

你的Sponsors类已作为多对多关系的显式连接表,结构符合需求,无需改动:

public class Sponsors
{
    [Key]
    public int SponsorhipId { get; set; }

    public string SponsorId { get; set; } = default!;

    [ForeignKey("SponsorId")]
    public Users Sponsor { get; set; } = default!;

    public string SponsoredId { get; set; } = default!;

    [ForeignKey("SponsoredId")]
    public Users Sponsored { get; set; } = default!;
}

3. 更新OnModelCreating配置

将原WithOne改为WithMany,关联到Users对应的集合属性,完成多对多关系映射:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<Users>().HasIndex(u => u.IdentificationCard).IsUnique();

    // 配置赞助人到赞助关系的一对多关联
    builder.Entity<Sponsors>()
           .HasOne(s => s.Sponsor)
           .WithMany(u => u.SponsoredUsers)
           .HasForeignKey(s => s.SponsorId)
           .OnDelete(DeleteBehavior.Restrict);

    // 配置被赞助人到赞助关系的一对多关联
    builder.Entity<Sponsors>()
           .HasOne(s => s.Sponsored)
           .WithMany(u => u.SponsorsOfUser)
           .HasForeignKey(s => s.SponsoredId)
           .OnDelete(DeleteBehavior.Restrict);
}

效果说明

  • 配置完成后,可通过Users.SponsoredUsers获取该用户赞助的所有学生,通过Users.SponsorsOfUser获取赞助该用户的所有赞助人。
  • Sponsors表会存储每一对赞助人与被赞助人的关联记录,支持任意数量的多对多关联。
  • 若后续需要为赞助关系添加额外属性(如赞助金额、生效时间),直接在Sponsors类中新增字段即可,这是显式连接表的灵活优势。

内容的提问来源于stack exchange,提问作者WhackTheWise

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:16:25