【发布时间】:2021-06-08 08:59:21
【问题描述】:
1) 我正在尝试在两个类之间建立关系。所以,我有以下课程
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”。导航属性可以 只参与单一的关系。如果你想覆盖一个 导航上的现有关系调用“忽略” 'MatchGame.AwayTeam' 首先在 'OnModelCreating' 中。
我也看过下面的帖子,但找不到关系无法建立的原因。
EF code first: one-to-many twice to same collection type
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/fluent/relationships
EFCore - How to have multiple navigation properties to the same type?
2) 另外,为了不创建新帖子:我希望团队类中的 public string Team { get; set; } 是唯一的。我尝试了一些我见过但没有用的 DataAnnotation。为此我必须使用什么。
【问题讨论】:
-
@philipxy 这个帖子似乎很清楚,解释性很好,显示了适当的研究
-
我的错误是我还问了另一个问题,但我认为这没什么大不了的,因为它试图找到一个数据注释。我的意图不是仅仅为数据注释创建一个新帖子
标签: c# .net entity-framework database-design