首页 > 解决方案 > EF Core 2.0,删除单个导航属性,一对一,使用 Fluent Api

问题描述

是否可以确保在使用 EF Core Fluent Api 删除父实体时删除导航属性(子实体)?

我有以下关系:

public class Estate {
   public Guid Id {get; set;}
   public Guid AddressId {get; set;}
   public Address Address {get; set;}    
}

public class Address {
   public Guid Id {get; set;}
}

地址需要是庄园的导航属性,因此我不能在庄园的地址上添加外键。那么在这种情况下,地址真的不依赖于房地产,因为它没有外键?

我正在寻找的行为是当我删除庄园时,相关的地址也应该被删除。

我尝试了以下配置但没有成功:

1)

modelBuilder.Entity<Estate>()
            .HasOne(e => e.Address)
            .WithOne()
            .HasForeignKey<Estate>(e => e.Id)
            .OnDelete(DeleteBehavior.Cascade);

2)

modelBuilder.Entity<Estate>()
            .HasOne(e => e.Address)
            .WithOne()
            .HasForeignKey<Estate>(e => e.AddressId)
            .OnDelete(DeleteBehavior.Cascade);

3)

modelBuilder.Entity<Estate>()
            .HasOne(e => e.Address)
            .WithOne()
            .IsRequired()
            .OnDelete(DeleteBehavior.Cascade);

4)

modelBuilder.Entity<Estate>()
            .HasOne(e => e.Address)
            .WithOne()
            .OnDelete(DeleteBehavior.Cascade);

甚至可以在不添加从地址到遗产的关系的情况下做到这一点吗?如果不是,那么我想在删除遗产时删除地址的唯一方法是手动执行(?):

_context.Estates.Remove(estate);
_context.Addresses.Remove(estate.Address);

提前致谢!

标签: c#one-to-oneef-fluent-apief-core-2.0cascading-deletes

解决方案


推荐阅读