[英]Relashionship configuration of multiple navigation properties of same type?
1)我正在尝试建立两个班级之间的关系。 所以,我有以下 class
public class Team
{
[Key]
public int Id { get; set; }
public string Team { get; set; }
public List<MatchGame> MatchGames { get; set; }
}
和
public class MatchGame
{
[Key]
public int Id { get; set; }
public int HomeTeamId { get; set; }
public Team HomeTeam { get; set; }
public int AwayTeamId { get; set; }
public Team AwayTeam { get; set; }
}
我尝试执行 relashioship 的配置是
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MatchGame>()
.HasOne(h => h.HomeTeam)
.WithMany(m => m.MatchGames)
.HasForeignKey(k => k.HomeTeamId)
.OnDelete(DeleteBehavior.Cascade);
modelBuilder.Entity<MatchGame>()
.HasOne(h => h.AwayTeam)
.WithMany(m => m.MatchGames)
.HasForeignKey(k => k.AwayTeamId)
.OnDelete(DeleteBehavior.NoAction);
}
产生的错误是:
无法在“Team.MatchGames”和“MatchGame.AwayTeam”之间创建关系,因为“Team.MatchGames”和“MatchGame.HomeTeam”之间已经存在关系。 导航属性只能参与单个关系。 如果您想在“OnModelCreating”中首先在导航“MatchGame.AwayTeam”上覆盖现有关系调用“Ignore”。
我也看到了以下线程,但找不到关系无法建立的原因。
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/relationships
2)另外,为了不创建新帖子:我想让public string Team { get; set; }
public string Team { get; set; }
public string Team { get; set; }
在 Class 团队中是唯一的。 我尝试了一些我见过但没有用的 DataAnnotation。 我必须为此目的使用什么。
问题是您尝试使用一个导航属性MatchGames
来定义关系。 尝试创建两个单独的导航属性,如下所示。
public class Team
{
public int Id { get; set; }
public string TeamName { get; set; }
public List<Match> HomeMatches { get; set; }
public List<Match> AwayMatches { get; set; }
}
public class MatchGame
{
public int Id { get; set; }
public int HomeTeamId { get; set; }
public Team HomeTeam { get; set; }
public int AwayTeamId { get; set; }
public Team AwayTeam { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<MatchGame>(entity =>
{
entity.HasOne(m => m.HomeTeam)
.WithMany(t => t.HomeMatches)
.HasForeignKey(m => m.HomeTeamId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
entity.HasOne(m => m.AwayTeam)
.WithMany(t => t.AwayMatches)
.HasForeignKey(m => m.AwayTeamId)
.IsRequired()
.OnDelete(DeleteBehavior.Cascade);
});
}
广告 2. 您需要在TeamName
上创建唯一索引:
modelBuilder.Entity<Team>(e => e.HasIndex(t => t.TeamName).IsUnique());
您也可以考虑在 model 等中添加MaxLength
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.