.net EF Core-引入外键约束可能会导致循环或多个级联路径

.net EF Core-引入外键约束可能会导致循环或多个级联路径,.net,sql-server,entity-framework-core,.net,Sql Server,Entity Framework Core,我一直在表'ExchangeHours'上引入外键约束'FK\u ExchangeHours\u Times\u StartTimeId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。尝试通过EF Core将数据库更新到MSSQLServer时出错。问题出在类ExchangeHour中,它引用了类时间 课程: public class ExchangeHour { ... public int

我一直在
表'ExchangeHours'上引入外键约束'FK\u ExchangeHours\u Times\u StartTimeId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他外键约束。
尝试通过EF Core将数据库更新到MSSQLServer时出错。问题出在类ExchangeHour中,它引用了类时间

课程:

public class ExchangeHour
{
    ...
    public int StartTimeId { get; set; }
    public Time StartTime { get; set; }
    public int EndTimeId { get; set; }
    public Time EndTime { get; set; }
    ...
}

public class Time
{
    public int TimeId { get; set; }
    public int Hours { get; set; }
    public int Minutes { get; set; }
    public int Seconds { get; set; }
}
关于迁移时间的MigrationScript

migrationBuilder.CreateTable(
                name: "ExchangeHours",
                columns: table => new
                {
                    ExchangeId = table.Column<string>(nullable: false),
                    DayOfWeek = table.Column<int>(nullable: false),
                    StartTimeId = table.Column<int>(nullable: false),
                    EndTimeId = table.Column<int>(nullable: false),
                    HourTypeId = table.Column<int>(nullable: false)
                },
                constraints: table =>
                {
                    table.PrimaryKey("PK_ExchangeHours", x => new { x.ExchangeId, x.DayOfWeek });
                    table.ForeignKey(
                        name: "FK_ExchangeHours_Times_EndTimeId",
                        column: x => x.EndTimeId,
                        principalTable: "Times",
                        principalColumn: "TimeId",
                        onDelete: ReferentialAction.Cascade);
                    table.ForeignKey(
                        name: "FK_ExchangeHours_Exchanges_ExchangeId",
                        column: x => x.ExchangeId,
                        principalTable: "Exchanges",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                    table.ForeignKey(
                        name: "FK_ExchangeHours_ExchangeHourTypes_HourTypeId",
                        column: x => x.HourTypeId,
                        principalTable: "ExchangeHourTypes",
                        principalColumn: "Id",
                        onDelete: ReferentialAction.Cascade);
                    table.ForeignKey(
                        name: "FK_ExchangeHours_Times_StartTimeId",
                        column: x => x.StartTimeId,
                        principalTable: "Times",
                        principalColumn: "TimeId",
                        onDelete: ReferentialAction.Cascade);
                });
migrationBuilder.CreateTable(
名称:“交换小时”,
列:表=>new
{
ExchangeId=table.Column(可空:false),
DayOfWeek=table.Column(可空:false),
StartTimeId=table.Column(可空:false),
EndTimeId=table.Column(可空:false),
HourTypeId=table.Column(可空:false)
},
约束:表=>
{
表.PrimaryKey(“PK_ExchangeHours”,x=>new{x.ExchangeId,x.DayOfWeek});
表1.外键(
名称:“FK\U交换小时数\U时间\U结束时间ID”,
列:x=>x.EndTimeId,
原则性:“时代”,
主栏:“TimeId”,
onDelete:引用。级联);
表1.外键(
名称:“FK_ExchangeHours_ExchangeId”,
列:x=>x.ExchangeId,
原则性:“交换”,
主栏:“Id”,
onDelete:引用。级联);
表1.外键(
名称:“FK_ExchangeHours_ExchangeHourTypes_HourTypeId”,
列:x=>x.HourTypeId,
原则性:“ExchangeHourTypes”,
主栏:“Id”,
onDelete:引用。级联);
表1.外键(
名称:“FK\U交换小时数\U时间\U开始时间”,
列:x=>x.StartTimeId,
原则性:“时代”,
主栏:“TimeId”,
onDelete:引用。级联);
});

当ExchangeHour被删除时,我想删除这两个时间引用,因为我不再需要它们了,所以我想要删除时的级联。但是,如果我删除对类时间的引用之一,则更新迁移不会出错。我没有看到任何周期或任何错误,所以我不确定,为什么我不能使用这个。我没有发现任何限制,一个类不能多次引用另一个类。你知道为什么会出现这个错误吗?

你的
交换时间
时间
之间有什么关系?1
ExchangeHour
到1
Time
,或者1
Time
可以与多个
ExchangeHour
ExchangeHour
可以有2
Time
,1
Time
可以与1
ExchangeHour
相关,似乎这是一些SQL服务器的一个已知问题,您可以阅读以下链接的更多信息。不幸的是,一些关系数据库,特别是SQL Server,不支持具有多个级联关系。在那里,你可以在代码中找到处理级联的可能解决方法。谢谢,我正在寻找类似的东西,但没有找到任何东西,谢谢链接。因此,不,没有循环,但有多个级联路径。除了删除一个级联删除并在代码中处理级联删除之外,无法避免此错误。真讨厌。