dst*_*101 3 asp.net-mvc foreign-keys entity-framework-core
我有一个与这里发布的问题类似的问题: Entity Framework Code First - Twoforeign Keys from same table,但是它非常旧,不适用于 Core,我无法得到适合我的建议。
基本上,我正在尝试创建一个固定表,其中有两个指向团队表的外键。一场比赛由主队和客队组成。拥有可为空的字段不是一种选择。
考虑一场有两支球队的比赛。
public class Fixture
{
public int Id { get; set; }
public Team HomeTeam { get; set; }
public int HomeTeamId { get; set; }
public Team AwayTeam { get; set; }
public int AwayTeamId { get; set; }
public virtual Team HomeTeam { get; set; }
public virtual Team AwayTeam { get; set; }
}
public class Team
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public String Name { get; set; }
public ICollection<Fixture> HomeFixtures { get; set; } = new List<Fixture>();
public ICollection<Fixture> AwayFixtures { get; set; } = new List<Fixture>();
}
Run Code Online (Sandbox Code Playgroud)
我收到错误...
无法确定“Team”类型的导航属性“Fixture.HomeTeam”表示的关系。手动配置关系,或者使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。
所以我尝试在数据库上下文中添加一些 OnModelCreating 代码:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Fixture>()
.HasOne(m => m.HomeTeam)
.WithMany(t => t.HomeFixtures)
.HasForeignKey(m => m.HomeTeamId)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<Fixture>()
.HasOne(m => m.AwayTeam)
.WithMany(t => t.AwayFixtures)
.HasForeignKey(m => m.AwayTeamId)
.OnDelete(DeleteBehavior.Restrict);
}
Run Code Online (Sandbox Code Playgroud)
然后我得到了错误:
Introducing FOREIGN KEY constraint 'FK_Fixtures_Teams_HomeTeamId' on table 'Fixtures' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙进行此设置吗?
谢谢。
public class Fixture
{
public int Id { get; set; }
public int HomeTeamId { get; set; }
public int AwayTeamId { get; set; }
[ForeignKey("HomeTeamId")]
public virtual Team HomeTeam { get; set; }
[ForeignKey("AwayTeamId")]
public virtual Team AwayTeam { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这样导航就可以工作了。另外,按照 @Ivan 的建议,删除重复的 getter 和 setter。
| 归档时间: |
|
| 查看次数: |
8887 次 |
| 最近记录: |