.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被删除时,我想删除这两个时间引用,因为我不再需要它们了,所以我想要删除时的级联。但是,如果我删除对类时间的引用之一,则更新迁移不会出错。我没有看到任何周期或任何错误,所以我不确定,为什么我不能使用这个。我没有发现任何限制,一个类不能多次引用另一个类。你知道为什么会出现这个错误吗?你的
交换时间和时间之间有什么关系?1ExchangeHour
到1Time
,或者1Time
可以与多个ExchangeHour
ExchangeHour
可以有2Time
,1Time
可以与1ExchangeHour
相关,似乎这是一些SQL服务器的一个已知问题,您可以阅读以下链接的更多信息。不幸的是,一些关系数据库,特别是SQL Server,不支持具有多个级联关系。在那里,你可以在代码中找到处理级联的可能解决方法。谢谢,我正在寻找类似的东西,但没有找到任何东西,谢谢链接。因此,不,没有循环,但有多个级联路径。除了删除一个级联删除并在代码中处理级联删除之外,无法避免此错误。真讨厌。