EF Core-引入FOREIGN KEY约束可能会导致循环或多个级联路径

时间:2020-10-07 13:28:14

标签: .net sql-server entity-framework-core

尝试通过EF Core将数据库更新到MSSQLServer时,出现Introducing FOREIGN KEY constraint 'FK_ExchangeHours_Times_StartTimeId' on table 'ExchangeHours' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.错误。问题出在ExchangeHour类中,该类引用了Time类。

课程:

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; }
}

有关ExhangeHours的迁移脚本。

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

当ExchangeHour将被删除时,我想删除两个时间参考,因为我不再需要它们了,所以我要删除上的级联。但是,如果我删除对Time类的引用,则update-migrations没有错误。我看不到任何循环或任何错误,因此我不确定,为什么不能使用此功能。我没有发现任何限制,一个类不能多次引用另一个类。任何想法为什么会引发此错误?

0 个答案:

没有答案