EF Core 6 升级 - 删除子对象同时删除父对象

EF Core 6 Upgrade - Deleting Child Object Also Deletes Parent

我有一个 EF Core 2.2 项目,我升级到了 EF Core 6。 存在用户为 EF 跟踪的实体上传一组新值的情况。

代码使用 SetState 将旧实体及其子实体标记为已删除,然后将值设置为新对象。

public void UpdateUserPreferences(UserPreferences newUserPreferences)
{
    var selectedUserConfig = this.database.ConfigurationSettings
        .Include(s => s.UserPreferences)
        .ThenInclude(sc => sc.UserPreference)
        .First(x => x.UserId == 1234);

    selectedUserConfig.UserPreferences.UserPreference
        .ToList()
        .ForEach(up => this.database.SetState(up, EntityState.Deleted);

    this.database.SetState(selectedUserConfig.UserPreferences, EntityState.Deleted);

    selectedUserConfig.UserPreferences = newUserPreferences;

    this.database.SaveChanges();
}

调用 SaveChanges 后,将保存一个新的 UserPreferences 实体以及我们想要的更新后的 UserPreference 子实体。但是,正在删除父 ConfigurationSettings 实体。

数据库快照配置为CascadeDelete

    modelBuilder.Entity("ConfigurationSettings", c =>
    {
        c.HasOne("UserPreferences", "UserPreferences")
            .WithMany()
            .HasForeignKey("UserPreferencesId")
            .OnDelete(DeleteBehavior.Cascade)
            .IsRequired()
            .HasConstraintName( "FK_dbo.ConfigurationSettings.UserPreferences_userPreferencesId" );
    }

我想要发生的是现有 ConfigurationSettings 实体未被删除,其 UserPreferencesId 更新为新保存的 UpdatedPreferences 实体。

没有抛出任何错误。

我似乎已经解决了这个问题,方法是在设置删除时删除对父 ConfigurationSettings 的引用,并在删除旧的 UserPreferences 之前添加新的 UserPreferences 语句。 .

public void UpdateUserPreferences(UserPreferences newUserPreferences)
{
    var selectedUserConfig = this.database.ConfigurationSettings
        .Include(s => s.UserPreferences)
        .ThenInclude(sc => sc.UserPreference)
        .First(x => x.UserId == 1234);
   
   var selectedUserPreferences = selectedUserConfig.UserPreferences;

   selectedUserConfig.UserPreferences = newUserPreferences;

    selectedUserPreferences.UserPreference
        .ToList()
        .ForEach(up => this.database.SetState(up, EntityState.Deleted);

    this.database.SetState(selectedUserPreferences, EntityState.Deleted);

    this.database.SaveChanges();
}