【发布时间】:2015-04-26 20:42:00
【问题描述】:
我收到以下错误:
附加信息:引入 FOREIGN KEY 约束 表 'Clubs' 上的 'FK_dbo.Clubs_dbo.Addresses_Address_Id' 可能会导致 循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
俱乐部模式
public class Club
{
[Key]
public int ClubId { get; set; }
//[Required(ErrorMessage = "Club name is required")]
[DisplayName("Club name")]
public string Name { get; set; }
//[Required(ErrorMessage = "Address is required")]
public virtual Address Address { get; set; }
}
地址模型
public class Address
{
//[Required]
[Key]
public int AddressId { get; set; }
//[Required(ErrorMessage = "Address is required")]
[DisplayName("Address")]
public string FirstLine { get; set; }
//[Required(ErrorMessage = "Town is required")]
[DisplayName("Town")]
public string Town { get; set; }
//[Required(ErrorMessage = "County is required")]
[DisplayName("County")]
public string County { get; set; }
[StringLength(8)]
[DisplayName("Postcode")]
public string Postcode { get; set; }
}
这是一对一的关系。
我已经尝试了几种解决方案来解决这个问题,删除了所需的数据注释。
我也试过这个代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
}
我也试过这个解决方案:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Address>().HasKey(a => a.AddressId);
modelBuilder.Entity<Club>().HasRequired(a => a.Address);
}
我哪里出错了,我该如何纠正?
【问题讨论】:
-
您的数据库中是否还有其他可能导致此错误的键?我觉得这里缺少一些额外的信息。
-
嗨,大卫,我还有 11 个模型,但 VS 抛出有关俱乐部和地址模型的错误。我应该把其他 11 个模型放在一起吗?
-
EF 抛出该错误是因为您的数据库已抛出该错误。这是级联引用的 SQL Server 错误。正如您所猜测的,Is 与 Clubs 和 Address 模型有关,但可能由于之前的一些级联关系而被抛出。这里的重点是,如果在删除地址时它还应该删除俱乐部记录,但由于之前对两个表的一些级联效应,俱乐部可能已经被删除,那么 SQL 服务器会感到困惑。请在此处粘贴这两个实体的所有关系及其所有代码。
标签: c# sql-server entity-framework