EF SQLite数据库表级联删除:DeleteBehavior.ClientCascade代码编写求助
解决EF Core中DeleteBehavior.ClientCascade配置错误问题
你的代码存在两个核心问题:
Schedule类缺少关联Account的导航属性,导致HasOne(b => b.Account)无法被EF Core识别- Fluent API的关联配置顺序与关系方向不匹配
第一步:修正实体类
给Schedule添加Account导航属性,让EF Core能识别两者的关联关系:
public class Schedule { public string AccountAccountId { get; set; } public int ScheduleId { get; set; } public DateTime Date { get; set; } // 添加关联Account的导航属性 public Account Account { get; set; } }
第二步:正确配置级联删除
有两种配置方式,任选其一即可:
方式1:从Schedule(多端)配置关联
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Schedule>() .HasOne(s => s.Account) // 每个Schedule属于一个Account .WithMany(a => a.Schedules) // 一个Account包含多个Schedule .HasForeignKey(s => s.AccountAccountId) // 显式指定外键字段 .OnDelete(DeleteBehavior.ClientCascade); }
方式2:从Account(主端)配置关联
protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Account>() .HasMany(a => a.Schedules) // 一个Account包含多个Schedule .WithOne(s => s.Account) // 每个Schedule属于一个Account .HasForeignKey(s => s.AccountAccountId) // 显式指定外键字段 .OnDelete(DeleteBehavior.ClientCascade); }
关键说明
DeleteBehavior.ClientCascade是客户端级联,只有当你加载了Account关联的Schedules集合时,删除Account才会自动删除对应的Schedule;如果未加载关联数据,需要手动处理删除逻辑。- 显式指定
HasForeignKey可以避免EF Core自动生成额外的外键字段,确保映射到你定义的AccountAccountId。
内容的提问来源于stack exchange,提问作者janci
相关产品推荐
相关产品推荐

