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

时间:2017-08-31 10:06:23

标签: c# entity-framework entity-framework-core cascade one-to-one

我在服务和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,所以我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

这个方向不可能,只有从校长到孩子