EF6 Code First - 可能会导致周期或多个级联路径 [英] EF6 Code First - may cause cycles or multiple cascade paths
问题描述
我有两个类:
public class Player
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption。身份)]
[Key]
public int Id {get;组; }
[必需,最小长度(2,ErrorMessage =播放器名称必须至少2个字符长度)]
public string Name {get;组;
[必需]
public int TeamClubId {get;组;
[必需]
public int TeamNationalId {get;组; }
[必需,ForeignKey(TeamClubId)]
public virtual Team Club {get;组; }
[必需,ForeignKey(TeamNationalId)]
public virtual Team National {get;组;
}
And:
public class Team
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id {get;组; }
[必需,最小长度(2,ErrorMessage =团队名称必须至少2个字符长度)]
public string Name {get;组;
[必需]
public TeamType Type {get;组; }
public virtual ICollection< Player>玩家{get;组; }
}
这是我们两个关系的班级。
玩家属于两支球队:俱乐部和国家队。
一个团队可以是俱乐部还是国家队,并持有一组球员。
在我的上下文文件中,我使用:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity< Player>()
.HasRequired< Team> (p => p.National)
.WithMany(t => t.Players)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
当运行迁移工具更新数据库时,我收到以下错误:
引入FOREIGN KEY约束表上的FK_dbo.Players_dbo.Teams_TeamNationalId可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
无法创建约束。查看以前的错误。
如何解决?
使用Fluent API:
//播放器 - 国家队关系
modelBuilder.Entity< Player>()
。HasRequired< Team>(p => p.National)
.WithMany()
.WillCascadeOnDelete(false);
//播放器 - 俱乐部团队关系
modelBuilder.Entity< Player>()
.HasRequired< Team>(p => p.Club)
。 WithMany()
.WillCascadeOnDelete(false);
I'm using EF6 Code First. I have two classes:
public class Player
{
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Key]
public int Id { get; set; }
[Required, MinLength(2, ErrorMessage = "Player name must be at least 2 characters length")]
public string Name { get; set; }
[Required]
public int TeamClubId { get; set; }
[Required]
public int TeamNationalId { get; set; }
[Required, ForeignKey("TeamClubId")]
public virtual Team Club { get; set; }
[Required, ForeignKey("TeamNationalId")]
public virtual Team National { get; set; }
}
And:
public class Team
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required, MinLength(2, ErrorMessage = "Team name must be at least 2 characters length")]
public string Name { get; set; }
[Required]
public TeamType Type { get; set; }
public virtual ICollection<Player> Players { get; set; }
}
These are my two class with their relationship. A player belongs to two teams: club and national teams. A team can be either club or national, and holds a collection of player.
In my context file I use:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Player>()
.HasRequired<Team>(p => p.National)
.WithMany(t => t.Players)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
When running the migration tool to update the database, I get the following error:
Introducing FOREIGN KEY constraint 'FK_dbo.Players_dbo.Teams_TeamNationalId' on table 'Players' 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. See previous errors.
How do I solve it?
Using Fluent API:
//player - national team relations
modelBuilder.Entity<Player>()
.HasRequired<Team>(p => p.National)
.WithMany()
.WillCascadeOnDelete(false);
//player - club team relations
modelBuilder.Entity<Player>()
.HasRequired<Team>(p => p.Club)
.WithMany()
.WillCascadeOnDelete(false);
这篇关于EF6 Code First - 可能会导致周期或多个级联路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!