C# 这个数据模型符合我的要求吗?

C# 这个数据模型符合我的要求吗?,c#,entity-framework-core,C#,Entity Framework Core,我正在创建一个类似于“曲棍球联盟”的Razor Pages应用程序。由于我仍然掌握外键/主键的概念,我不太确定是否正确设置了数据模型。在迁移后尝试更新数据库后,我遇到以下错误,这使我相信我没有正确设置数据库: 在表“Team”上引入外键约束“FK_Team_Division_Division id”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束 基于这三个实体,我是否明显做错了什么 public class Team { public

我正在创建一个类似于“曲棍球联盟”的Razor Pages应用程序。由于我仍然掌握外键/主键的概念,我不太确定是否正确设置了数据模型。在迁移后尝试更新数据库后,我遇到以下错误,这使我相信我没有正确设置数据库:

在表“Team”上引入外键约束“FK_Team_Division_Division id”可能会导致循环或多个级联路径。指定“在删除时不执行操作”或“在更新时不执行操作”,或修改其他外键约束

基于这三个实体,我是否明显做错了什么

public class Team
{
    public int ID { get; set; }
    public int? CoachID { get; set; }
    public int? DivisionID { get; set; }
    public int? ConferenceID { get; set; }

    [Display(Name = "Team")]
    public string TeamName { get; set; }

    [Display(Name = "Location")]
    public string TeamLocation { get; set; }

    public Coach Coach { get; set; }
    public Division Division { get; set; }
    public Conference Conference { get; set; }

    public ICollection<Player> Players { get; set; }
}

public class Conference
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }

    [Display(Name = "Conference")]
    public string ConferenceName { get; set; }

    public ICollection<Division> Divisions { get; set; }
    public ICollection<Team> Teams { get; set; }        
}

public class Division
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
    public int ConferenceID { get; set; }

    [Display(Name = "Division")]
    public string DivisionName { get; set; }

    public Conference Conference { get; set; }

    public ICollection<Team> Teams { get; set; }

}
公共类团队
{
公共int ID{get;set;}
公共int?CoachID{get;set;}
public int?DivisionID{get;set;}
公共int?ConferenceID{get;set;}
[显示(Name=“Team”)]
公共字符串TeamName{get;set;}
[显示(名称=“位置”)]
公共字符串TeamLocation{get;set;}
公共Coach{get;set;}
公除法除法{get;set;}
公开会议{get;set;}
公共ICollection播放器{get;set;}
}
公开课会议
{
[数据库生成(DatabaseGeneratedOption.None)]
公共int ID{get;set;}
[显示(Name=“会议”)]
公共字符串ConferenceName{get;set;}
公共ICollection分区{get;set;}
公共ICollection团队{get;set;}
}
公共课组
{
[数据库生成(DatabaseGeneratedOption.None)]
公共int ID{get;set;}
公共int ConferenceID{get;set;}
[显示(Name=“Division”)]
公共字符串名称{get;set;}
公开会议{get;set;}
公共ICollection团队{get;set;}
}

我的想法是每个
团队将属于
会议
部门
。在一个
部门中可能有许多
团队
,在一个
会议中可能有许多
部门

您遇到的问题是SQL server不知道如何处理具有多个父项的项目的
删除
。你需要帮点忙。选择要在其上删除的路线,例如:

Conference --> Division --> Team
Conference --> Team
然后,您必须确定不希望删除它的路由,例如:

Conference --> Division --> Team
Conference --> Team
一旦决定了哪些路由将不用于删除,就可以在上下文的
OnModelCreating(dbmodelbuildermodelbuilder)
方法中指定它

modelBuilder.Entity<Conference>() 
    .HasRequired(x => x.Team)     
    .WithMany()
    .WillCascadeOnDelete(false);
modelBuilder.Entity()
.has必需(x=>x.Team)
.有很多
.WillCascadeOnDelete(假);
编辑

很确定我在上面倒过来了,试试这个:

modelBuilder.Entity<Team>() 
    .HasRequired(x => x.Conference)     
    .WithMany()
    .WillCascadeOnDelete(false);
modelBuilder.Entity()
.has必需(x=>x.Conference)
.有很多
.WillCascadeOnDelete(假);

您遇到的问题是SQL server不知道如何处理具有多个父项的项目的
删除。你需要帮点忙。选择要在其上删除的路线,例如:

Conference --> Division --> Team
Conference --> Team
然后,您必须确定不希望删除它的路由,例如:

Conference --> Division --> Team
Conference --> Team
一旦决定了哪些路由将不用于删除,就可以在上下文的
OnModelCreating(dbmodelbuildermodelbuilder)
方法中指定它

modelBuilder.Entity<Conference>() 
    .HasRequired(x => x.Team)     
    .WithMany()
    .WillCascadeOnDelete(false);
modelBuilder.Entity()
.has必需(x=>x.Team)
.有很多
.WillCascadeOnDelete(假);
编辑

很确定我在上面倒过来了,试试这个:

modelBuilder.Entity<Team>() 
    .HasRequired(x => x.Conference)     
    .WithMany()
    .WillCascadeOnDelete(false);
modelBuilder.Entity()
.has必需(x=>x.Conference)
.有很多
.WillCascadeOnDelete(假);

是否有什么原因会出现这样的错误:“EntityTypeBuilder”不包含“HasRequired”的定义,并且找不到可访问的扩展方法“HasRequired”接受类型为“EntityTypeBuilder”的第一个参数您使用的是什么版本的EFCore?EFCore 2.1.1,我相信类似EFCore的外观在这里略有不同。请尝试
HasOne
。是否有任何原因导致出现错误,例如:“EntityTypeBuilder”不包含“HasRequired”的定义,并且找不到可访问的扩展方法“HasRequired”接受类型为“EntityTypeBuilder”的第一个参数您使用的EF版本是什么?EFCore 2.1.1,我相信像EFCore这样的书在这里有点不同。试试HasOne