我的MVC项目中有以下内容(代码优先方法),我想知道出现以下错误的原因是什么
在表“ VendorDetails”上引入FOREIGN KEY约束“ FK_dbo.VendorDetails_dbo.States_StateID”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。无法创建约束。请参阅先前的错误。
我只是想知道哪些表正在获取多个级联路径,任何图都将有效,并且我应该使用流畅的API编写如下代码: modelBuilder.Entity<...>() .HasRequired(...) .WithMany(...) .HasForeignKey(...) .WillCascadeOnDelete(false);
public class VendorDetails
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorID { get; set; }
[MaxLength(60)]
public string VendorName { get; set; }
public int VendorTypeID { get; set; }
public int CountryID { get; set; }
public int StateID { get; set; }
[NotMapped]
public string CountryName { get; set; }
[NotMapped]
public string StateName { get; set; }
[NotMapped]
public string VendorTypeName { get; set; }
public virtual Country Country { get; set; }
public virtual State State { get; set; }
public virtual VendorType VendorType { get; set; }
}
public class VendorType
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int VendorTypeID { get; set; }
public string VendorTypeName { get; set; }
public virtual ICollection<VendorDetails> Vendors { get; set; }
}
public class Country
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CountryID { get; set; }
public string CountryName { get; set; }
public virtual ICollection<State> States { get; set; }
}
public class State
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int StateID { get; set; }
public string StateName { get; set; }
public int CountryID { get; set; }
public virtual Country Country { get; set; }
}
之所以会这样,是因为Country链接到State,而VendorDetails链接到Country和State。这提供了VendorDetails和州之间的多种路径-一种通过国家/地区,另一种直接。
我将禁用从VendorDetails链接到状态的级联删除:
modelBuilder
.Entity<VendorDetails>()
.HasOptional(e => e.State)
.WithMany()
.WillCascadeOnDelete(false);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句