asp.net EF代码实体关系的第一次设计[已关闭]

nszi6y05  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(84)

已关闭,此问题为opinion-based。它目前不接受回答。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。

29天前关闭
Improve this question
我有3个实体,用户,联盟和团队。我有以下要求:
一个用户联盟组合只能有一个团队。
联盟-团队组合只能有1个用户。
用户-团队组合可以有多个联赛。
所以这些是有效的组合:

User League Team
1    1      1
1    2      2
1    3      1
2    1      2
2    2      1
3    1      3
3    3      2

在EF Code First中实现这一目标的最佳方法是什么?创建一个包含Users-Leagues-Teams的连接表,还是多个连接表(例如Users-Leagues、Users-Teams、Leagues-Teams)更好?执行上述规定的最佳方法是什么?
先谢了。
编辑:
在Roberto的建议下,我现在有了这个实体:

public class UserLeagueTeam {

    public int UserId { get; set; }

    public ApplicationUser? User { get; set; }

    public int LeagueId { get; set; }   

    public League? League { get; set; } 

    public int TeamId { get; set; } 

    public Team? Team { get; set; }
}

在构建器中,它看起来像这样:

public class UserLeagueTeamTypeConfiguration : IEntityTypeConfiguration<UserLeagueTeam>
{
    public void Configure(EntityTypeBuilder<UserLeagueTeam> builder)
    {
        builder.ToTable("UserLeagueTeam");
        builder.HasKey(u => new { u.UserId, u.LeagueId, u.TeamId });
        builder.HasIndex(x => new { x.UserId, x.LeagueId }).IsUnique();
        builder.HasIndex(x => new { x.LeagueId, x.TeamId }).IsUnique();
    }
}

这是正确的做法吗?

zdwk9cvp

zdwk9cvp1#

我建议使用显式实体来管理关系,类似于以下内容:

public class UserLeagueTeamRelation {
    public int UserId { get; set; }

    public User? User { get; set; }

    public int LeagueId { get; set; }   

    public League? League { get; set; } 

    public int TeamId { get; set; } 

    public Team? Team { get; set; }
}

然后在构建器中设置唯一索引:

public class UserLeagueTeamRelationTypeConfiguration : IEntityTypeConfiguration<UserLeagueTeamRelation> {
    public void Configure(EntityTypeBuilder<UserLeagueTeamRelation> builder) {
        // ...
        builder.HasIndex(x => new { x.UserId, x.LeagueId }).IsUnique();
        builder.HasIndex(x => new { x.LeagueId, x.TeamId }).IsUnique();
        // ...
    }
}

相关问题