我想确认由于多个外键导致周期性级联删除问题的正确方法。
public class User
{
[Key]
public Guid Id { get; set; }
public ICollection<Minute> Minutes { get; set; }
public ICollection<Meeting> Meetings { get; set; }
}
public class Meeting
{
[Key]
public Guid Id { get; set; }
public Minute MeetingNotes { get; set; }
[Required]
public Guid UserId { get; set; }
[Required]
public User CreatedBy { get; set; }
}
public class Minute
{
[Key]
public Guid Id { get; set; }
[Required]
public Guid MeetingId { get; set; }
[Required]
public Meeting ScheduledMeeting { get; set; }
[Required]
public Guid UserId { get; set; }
[Required]
public User CreatedBy { get; set; }
}
我需要全局打开级联删除功能,因为如果要删除该用户,我希望删除与该用户相关的所有会议/会议记录。 Meeting
也是如此。如果删除Meeting
,我也希望删除与Minute
相关的Meeting
。
我在会议/分钟之间有1-0的关系。
我没有任何流利的API配置,因为我正在使用代码方法来定义我的关系。上面的问题是 Minute 表在迁移期间会引发错误(may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
)
通过阅读有关内容,我了解到由于启用了级联删除,删除用户将删除会议/会议记录,但是由于会议记录与会议具有必需的外键关系,因此将再次尝试删除。
我知道我必须使用流畅的API来定义这种关系,但是我不确定是否采用正确的方法。如下定义就足够了吗?
modelBuilder.Entity<User>()
.HasMany(s => s.Meetings)
.WithOne(g => g.CreatedBy)
.HasForeignKey(s => s.UserId);
modelBuilder.Entity<User>()
.HasMany(s => s.Minutes)
.WithOne(g => g.CreatedBy)
.HasForeignKey(s => s.UserId)
.OnDelete(DeleteBehavior.Restrict);
访问外键表之一并限制删除行为是正确的方法,还是我需要在 Meeting 上进行一些流畅的API配置?我想确认正确的路径,是否采用正确的方法。