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不可能。
我在 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不可能。