这是我的模型Schedule.cs
public int Id { get; set; }
public int? ParentScheduleId { get; set; }
public Schedule? ParentSchedule { get; set; }
public ICollection<Schedule>? ChildSchedules { get; set; }
以下是配置代码:
public class ScheduleConfiguration : IEntityTypeConfiguration<Schedule>
{
public void Configure(EntityTypeBuilder<Schedule> builder)
{
builder.Property(s => s.Id).UseIdentityColumn();
builder.HasOne(x => x.ParentSchedule)
.WithMany(x => x.ChildSchedules)
.HasForeignKey(x => x.ParentScheduleId)
.OnDelete(DeleteBehavior.Cascade);
}
}
这已经在SQLite和MySql数据库上工作了。这是对SQL Server数据库的限制吗?还是我做错了什么?
尝试更新数据库时出现以下错误:Microsoft.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 'FK_Schedules_Schedules_ParentScheduleId' on table 'Schedules' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
我已经尝试了错误消息中建议的不同ON DELETE行为。但结果是相同的。
1条答案
按热度按时间weylhg0b1#
据我所知,如果更改级联到它所源自的同一个表,或者通常在关系中存在循环时,MS SQL Server不支持删除/更新级联。
因此,这里的解决方案是:
ClientCascade
行为,它将允许EF对加载的实体执行级联删除,即使数据库不支持此操作。ClientSetNul
(因为FK可为空):