gpt4 book ai didi

c# - 如何在 EF Core 多对多关系中对删除进行建模?

转载 作者:行者123 更新时间:2023-12-05 01:45:40 24 4
gpt4 key购买 nike

我已经 followed the docs使用作为实体公开的连接表来设置我的多对多关系。

但是文档没有提到我应该如何删除。

例如,Student 有很多老师,Teacher 有很多学生。加入实体/表是 StudentTeacher

连接表/实体:

public class StudentTeacher {
public int StudentId { get; set; }
public Student Student { get; set; }
public int TeacherId { get; set; }
public Teacher Teacher { get; set; }
}

连接表/实体的配置:

modelBuilder.Entity<StudentTeacher>()
.HasOne(b => b.Teacher)
.WithMany(b => b.StudentTeachers)
.HasForeignKey(b => b.TeacherId)
.IsRequired()
.OnDelete(/* ... what goes here? ...*/);

modelBuilder.Entity<StudentTeacher>()
.HasOne(b => b.Student)
.WithMany(b => b.StudentTeachers)
.HasForeignKey(b => b.StudentId)
.IsRequired()
.OnDelete(/* ... what goes here? ...*/);

我在 OnDelete() 中使用什么?为什么?

最佳答案

.OnDelete(/* ... what goes here? ...*/);

当父记录(在 StudentTeacher 中)被删除时,您应该在这里指定 DB 必须对子记录(在 StudentTeacher 中)做什么: 如果对应的子记录存在,也删除(Cascade) 或禁止并抛出错误(Restrict)。使用 Restrict,您必须在删除父记录之前手动删除子记录。

但只有您可以决定必须为每个关系应用什么操作 - 这是您的应用程序,我们不知道它的所有要求。

重要:使用Cascade,删除,比方说,Teacher 将影响(删除)StudentTeacher 中的记录(与相应的TeacherId),但Students将保持不变。

重要2:在MS SQL Server中(你没有写你正在使用的数据库引擎),你可以只设置一个Cascade(其他应该是Restrict),否则您将在应用迁移时收到错误消息(在表 _some_table_ 上引入 FOREIGN KEY 约束 _some_name_ 可能会导致循环或多个级联路径。)

关于c# - 如何在 EF Core 多对多关系中对删除进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40928346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com