我将provincesModel
pr_id
作为foreign Key
添加到clinicsModel
。因此,visual studio会显示此错误消息
Introducing FOREIGN KEY constraint 'FK_dbo.ClinicsModels_dbo.ProvincesModels_pr_id' on table 'ClinicsModels' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
我尝试通过在网上浏览找到解决方案来解决问题,但我无法解决这个问题。因此,我从foreign key
中移除了pr_id
的{{1}}关系并运行该项目,但仍然可视工作室向我显示相同的错误消息。我还重新创建clinicsModel
并尝试使用ClinicsModel
使用Update-Database -Verebose Migrations
更新数据库,但它仍显示相同的错误消息。
这是我的代码:
代表package manager console
ProvinceModel
namespace finalFyp.Models
{
public class ProvincesModel
{
[Key]
public int pr_id { get; set; }
public string pr_name { get; set; }
public ICollection<CitiesModel> cities { get; set; }
}
}
:
ClinicsModel
当我重定向到 public class ClinicsModel
{
[Key]
public int clinic_id { get; set; }
public string clinic_name { get; set; }
public string clinic_address { get; set; }
//Forigen Keys
public int ct_id { get; set; }
public CitiesModel city { get; set; }
}
}
时发生错误
这是错误消息的快照。
http://localhost:3110/Doctors/index
:
DoctorsModel
请指导我我想做什么?我将非常感谢他/她。
答案 0 :(得分:0)
从第一眼看,当pr_id
作为ClinicsModel
的外键添加时发生错误,因为ProvincesModel
与ClinicsModel
表有一对多关系,涉及pr_id
1}}主键字段。由于引用pr_id
的所有外键都不可为空,因此所涉及ProvincesModel
的所有一对多关系都默认启用级联删除。因此,这意味着当删除ClinicsModel
实体数据时,它将有2个级联删除路径:通过CitiesModel
并直接转到ProvincesModel
,如下图所示。
因此,它与从ClinicsModel
到ProvincesModel
的多个级联删除路径建立循环关系,导致SQL Server中出现错误1785.
要解决关系问题,pr_id
外键应声明为Nullable<int>
:
public int? pr_id { get; set; }
同样,如果ct_id
(和其他int
外键属性受到可能的循环关系)也返回相同的错误,请以与上述相同的方式声明它们:
public int? ct_id { get; set; }
NB:如果正在使用Fluent API(和Code First),请尝试在下面添加以下这些行:
// taken from /a/20915232
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
// modified from /a/17127512
// used on all entities with circular relationships
var builder = new DbModelBuilder();
builder.Entity<CitiesModel>()
.HasRequired(x => x.ct_id)
.WithMany()
.WillCascadeOnDelete(false);
builder.Entity<ProvincesModel>()
.HasRequired(x => x.pr_id)
.WithMany()
.WillCascadeOnDelete(false);
类似问题:
Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths - why?
Introducing FOREIGN KEY constraint may cause cycles or multiple cascade paths