实体框架-引入外键约束可能会导致周期

阿尔弗雷多·索勒(Alfredo Soler)

我正在开发ASP.NET Core(2.0)Web App,并且具有以下两个类:

1,团队班

public class Team
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string ImageUrl { get; set; }
}

2,比赛类

public class Match
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    [Required]
    public virtual Team Team1 { get; set; }
    [Required]
    public virtual Team Team2 { get; set; }
    public int ScoreTeam1 { get; set; }
    public int ScoreTeam2 { get; set; }
}

当我尝试更新数据库时,收到以下错误:

Introducing FOREIGN KEY constraint 'FK_Matches_Teams_Team2Id' on table 
'Matches' may cause cycles or multiple cascade paths. Specify ON DELETE NO 
ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint or index. See previous errors.

不能将两个外键之一都设为可选。我看到了多个线程,但大多数情况下已弃用它们(即它们使用DbModelBuilder或HasRequired)。

我该如何解决?谢谢!

米克

我相信您仍然像这样在这里描述的那样使用模型构建器来做...

public class MatchContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder
            .Entity<Match>()
            .HasOne<Team>(e => e.Team1)
            .WithMany(e => e.Matches)
            .OnDelete(DeleteBehavior.Restrict);
    }
}

public class Team
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }
    public string ImageUrl { get; set; }

    public ICollection<Match> Matches { get; set; }
}

public class Match
{
    public int Id { get; set; }
    public DateTime Date { get; set; }
    [Required]
    public virtual Team Team1 { get; set; }
    [Required]
    public virtual Team Team2 { get; set; }
    public int ScoreTeam1 { get; set; }
    public int ScoreTeam2 { get; set; }
}

如果您尝试删除一个或多个比赛所引用的小组,Restrict将不执行任何操作,否则将导致异常。其他替代方法在这里介绍...

https://docs.microsoft.com/zh-cn/ef/core/saving/cascade-delete

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章