2

我在 ef 核心上建立了一对一的关系。当我尝试删除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实体上设置 FK?

谢谢!

4

1 回答 1

1

我看到您的One-to-One Fluent API配置没有以正确的方式编写,因为您没有指定依赖实体。您的Fluent API配置应编写如下:

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

现在删除 aMediaPlan也将删除其依赖项Article,如下所示:

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

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

注意:只有删除主体实体才会级联删除依赖实体。反之亦然。

于 2019-06-18T22:41:21.980 回答