Asp.net mvc 外键约束可能导致循环或多个级联路径[错误消息]

Asp.net mvc 外键约束可能导致循环或多个级联路径[错误消息],asp.net-mvc,entity-framework,asp.net-mvc-5,ef-code-first,foreign-keys,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Ef Code First,Foreign Keys,我将provincesModel的pr\u id作为外键添加到clinicalsmodel。因此VisualStudio会向我显示此错误消息 在表“ClinicsModels”上引入外键约束“FK_dbo.ClinicsModels_dbo.provincessmodels_pr_id”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。 我试图通过浏览网页找到一些解决方案来解决这个问题,但我不知道如何解决这个问题

我将
provincesModel
pr\u id
作为
外键添加到
clinicalsmodel
。因此VisualStudio会向我显示此错误消息

在表“ClinicsModels”上引入外键约束“FK_dbo.ClinicsModels_dbo.provincessmodels_pr_id”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。

我试图通过浏览网页找到一些解决方案来解决这个问题,但我不知道如何解决这个问题。因此,我从
clinicsModel
中删除了
pr\u id
外键
关系,并运行该项目,但visual studio仍向我显示相同的错误消息。我还重新创建了
ClinicsModel
,并尝试使用
updatedatabase-Verebose Migrations
更新数据库,使用
packagemanager控制台
,但它仍然显示相同的错误消息

这是我的密码:

对于
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; }
    }
}
当我重定向到
http://localhost:3110/Doctors/index
这是错误消息的快照。

博士模型

 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; }
    }
}
public class DoctorsModel
{
    [Key]
    public int d_id { get; set; }
    public string d_name { get; set; }
    public string contact { get; set; }
    public string cnic { get; set; }
    public string email { get; set; }
    public string gender { get; set; }
    //Forigen Key
    public ICollection<DocExperiencesModel> experiences { get; set; }
    public ICollection<DocSpecialization> specializations { get; set; }
    public ICollection<QualificationsModel> qualifications { get; set; }
    public ICollection<DoctorProfileModel> profiles { get; set; }
}
公共类博士模型
{
[关键]
公共int d_id{get;set;}
公共字符串d_name{get;set;}
公共字符串联系人{get;set;}
公共字符串cnic{get;set;}
公共字符串电子邮件{get;set;}
公共字符串{get;set;}
//福里根键
公共ICollection体验{get;set;}
公共ICollection专用化{get;set;}
公共ICollection限定{get;set;}
公共ICollection配置文件{get;set;}
}
为了便于理解,这里是我的数据库模式。


请指导我该怎么办?我将非常感谢他/她。

乍一看,错误发生在
pr\u id
作为外键添加到
ClinicsModel
时,因为
ProvincesModel
与涉及
pr\u id
主键字段的
ClinicsModel
表有一对多关系。由于引用
pr\u id
的所有外键都不可为空,因此涉及
ProvincesModel
的所有一对多关系在默认情况下都启用了级联删除。因此,这意味着当删除一个
ClinicsModel
实体数据时,它将有两个级联删除路径:通过
CitiesModel
和直接到
ProvincesModel
,如下图所示

因此,它与从
ClinicsModel
ProvincesModel
的多个级联删除路径建立循环关系,从而导致SQL Server中出现错误1785

要解决关系问题,
pr\u id
外键应声明为
Nullable

同样,如果
ct\u id
(以及其他可能存在循环关系的
int
外键属性)也返回相同的错误,则使用与上述相同的方式声明它们:

public int? ct_id { get; set; }
NB:如果正在使用Fluent API(首先是代码),请尝试在下面添加以下行:

// 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);
//摘自/a/20915232
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove();
}
//修改自/a/17127512
//用于具有循环关系的所有实体
var builder=new DbModelBuilder();
builder.Entity()
.has必需(x=>x.ct\u id)
.有很多
.WillCascadeOnDelete(假);
builder.Entity()
.has必需(x=>x.pr\u id)
.有很多
.WillCascadeOnDelete(假);
类似问题:

// 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);