我在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
实体上设置FK吗?
谢谢!
答案 0 :(得分:0)
我看到您的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);
现在删除MediaPlan
还将删除其相关的Article
,如下所示:
var mediaPlanToBeDeleted = await _db.MediaPlans.FirstOrDefaultAsync(x=>x.Id == id);
_db.MediaPlans.Remove(mediaPlanToBeDeleted);
await _db.SaveChangesAsync();
现在,如果您想要相反的行为,那么就必须反转您的 Fluent API 配置。
注:仅删除主体实体将级联删除从属实体。反之亦然。