使用EF6 Code First约定,我想用到同一张表的两个外键创建模型。例如,现在我有团队模型:
public class Team
{
public Guid Id { get; set; }
public String Name { get; set; }
public virtual ICollection<Match> Matches { get; set; }
}
和匹配模型:
public class Match
{
public Guid Id { get; set; }
public Int32 TeamHomeScore { get; set; }
public Int32 TeamAwayScore { get; set; }
public Guid TeamHomeId { get; set; } // I want these properties to be foreign keys
public Guid TeamAwayId { get; set; } //
public virtual Team TeamHome { get; set; }
public virtual Team TeamAway { get; set; }
}
但是在项目运行之后,我有下一个异常:
在表“匹配”上引入外键约束“ FK_dbo.Matches_dbo.Teams_TeamHomeId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。无法创建约束。
有什么建议吗?
SQL Server返回错误,因为它无法处理多个级联路径。多重路径是具有许多团队属性的比赛。
将删除时的级联设置为false。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Match>()
.HasRequired<Team>(i => i.TeamHome)
.WithMany(i => i.Matches)
.WillCascadeOnDelete(false);
base.OnModelCreating(modelBuilder);
}
由于没有级联删除,因此必须先删除团队的比赛,然后再删除团队本身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句