EF Core删除一对一关系中的相关实体

EF Core Deleting related entities on One To One relationship

我在 ef core 上建立了一对一的关系。当我尝试删除 Article 实体我需要级联 MediPlan 因为它是 one to one 关系。当我删除 Article 时,MediaPlan 没有被删除。

这里设置好了。

public class Article
{
    public int Id { get; set; }

    public int MediaPlanId { get; set; }

    public MediaPlan MediaPlan { get; set; }
}

public class MediaPlan
{
    public int Id { get; set; }
    public Article Article { get; set; }
}

上下文

modelBuilder.Entity<Article>().HasOne(x => x.MediaPlan).WithOne(x => x.Article);

要删除的代码

var article = await _db.Articles
            .Include(x=>x.MediaPlan)
            .SingleAsync(x=>x.Id == id);
_db.Articles.Remove(article);
await _db.SaveChangesAsync();

我是否也必须在 MediaPlan 实体上设置外键?

谢谢!

我看到你的 One-to-One Fluent API 配置不正确,因为你没有指定依赖实体。你的FluentAPI配置应该这样写:

modelBuilder.Entity<Article>().HasOne(a => a.MediaPlan)
                              .WithOne(mp => mp.Article)
                              .HasForeignKey<Article>(a => a.MediaPlanId)
                              .OnDelete(DeleteBehavior.Cascade);

现在删除一个 MediaPlan 也会删除其依赖的 Article,如下所示:

var mediaPlanToBeDeleted = await _db.MediaPlans.FirstOrDefaultAsync(x=>x.Id == id);
_db.MediaPlans.Remove(mediaPlanToBeDeleted);
await _db.SaveChangesAsync();

现在,如果您想要反向行为,则必须反向您的 Fluent API 配置。

注意:只有删除主实体才会级联删除从属实体。 Vice-versa不可能。