gpt4 book ai didi

c# - Entity Framework ——引入外键约束可能会造成循环

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:49 27 4
gpt4 key购买 nike

我正在开发一个 ASP.NET Core (2.0) Web 应用程序,我有以下两个类:

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)。

我该如何解决这个问题?谢谢!

最佳答案

我相信您仍然按照描述的方式使用模型构建器来完成 here像这样……

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://learn.microsoft.com/en-us/ef/core/saving/cascade-delete

关于c# - Entity Framework ——引入外键约束可能会造成循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102929/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com