EF Core 2.0, Удалить одиночное свойство навигации, один к одному, используя Fluent Api - PullRequest
0 голосов
/ 17 апреля 2019

Можно ли гарантировать, что свойство навигации (дочерняя сущность) будет удалено при удалении родительской сущности с помощью 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);

Заранее спасибо!

...