c# - 实体框架核心级联删除一对一关系

Joe*_*man 6 c# entity-framework cascade one-to-one entity-framework-core

我在服务和 Lexikon 之间有一对一的关系,而服务有 Lexikon 的外键。我的服务不需要 Lexikon,因此我将 LexikonID 设置为可为空。但我的 Lexikon 仅当与服务相关时才能存在,因此我将导航属性设置为 [必需]。我使用的是 Code First,因此 EF 构建了我的数据库。

 public class Service
 {

    public int ServiceID { get; set; }

    //Foreignkey
    public int? LexikonID { get; set; }

    //Navigation Properties

    public Lexikon Lexikon { get; set; }
 }

 public class Lexikon
 {
    public int LexikonID { get; set; }

    //Navigation Properties
    [Required]
    public SoftwareService SoftwareService { get; set; }

 }
Run Code Online (Sandbox Code Playgroud)

如果我删除我的服务,我会尝试自动删除 Lexikon 表中的数据,但不幸的是,我不知道如何执行此操作,因为我是 EF 新手。

我在 dbContext 中尝试了以下代码:

       modelBuilder.Entity<SoftwareService>()
                .HasOne(l => l.Lexikon)
                .WithOne(s => s.SoftwareService)
                .HasForeignKey<SoftwareService>(l => l.LexikonID)
                .OnDelete(DeleteBehavior.Cascade);
Run Code Online (Sandbox Code Playgroud)

但是当我删除我的服务时,表 Lexikon 中的数据仍将在其中。另一方面,当我删除词典时,它会自动删除服务,这很好,但我也希望当我删除服务时,我的词典也会发生这种情况。

不幸的是我不熟悉 OnDelete-Method 所以我希望有人可以帮助我。

Ric*_*res 1

您是否从模型生成了数据库?您必须这样做,因为 EF 会生成 ON DELETE CASCADE 约束。否则,您将需要手动添加它。我针对 EF pre-Core 写了一篇关于这个问题的文章,但它仍然适用: https: //weblogs.asp.net/ricardoperes/entity-framework-pitfalls-cascade-deletes