已关闭,此问题为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();
}
}
这是正确的做法吗?
1条答案
按热度按时间zdwk9cvp1#
我建议使用显式实体来管理关系,类似于以下内容:
然后在构建器中设置唯一索引: