服务与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; }

 }


如果我删除我的服务,我试图自动删除表Lexikon中的数据,但是不幸的是,由于我是EF新手,所以我不确定如何执行此操作。

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

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


但是当我删除我的服务时,表Lexikon中的数据仍将保留在其中。另一方面,当我删除lexikon时,它将自动删除服务,这很好,但是我也希望删除服务时发生在我的Lexikon上。

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

最佳答案

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

10-04 22:22