Введение ограничения FOREIGN KEY для таблицы Accountants может вызвать циклы или несколько каскадных путей. - PullRequest
1 голос
/ 16 июня 2020

У меня есть следующая сущность:

public class Accountants
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public Person Accountant { get; set; }
    public Person AccountantSubstitute { get; set; }
}

Вот сущность Person:

public class Person
{

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Когда я пытаюсь обновить свою базу данных, я получаю следующую ошибку:

Введение ограничения FOREIGN KEY 'FK_Accountants_Person_AccountantSubstituteId' в таблице 'Accountants' может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY. Не удалось создать ограничение или индекс. См. Предыдущие ошибки.

Если я правильно понимаю, при удалении AccountantSubstitute это будут циклы или несколько путей casacde? Если да, то почему и как я могу отключить "каскадирование при удалении" в ядре entityframework для этой сущности?

Я пытался сделать что-то вроде этого:

    modelBuilder.Entity<Person>().HasOne("AccountantSubstitute").WithMany().HasForeignKey("AccountantSubstituteId").OnDelete(DeleteBehavior.Restrict);

Но это дает мне ошибка:

The navigation property 'AccountantSubstitute' cannot be added to the entity type 'Person' because there is no corresponding CLR property on the underlying type and navigations properties cannot be added to shadow state.'

Итак, как я могу это исправить?

РЕДАКТИРОВАТЬ:

Кажется, я решаю проблему следующим образом:

    modelBuilder.Entity<Accountants>().HasOne(x => x.AccountantSubstitute).WithMany().HasForeignKey(x => x.Id).OnDelete(DeleteBehavior.Restrict);

Но я не могу понять решение? Что делает этот код? Я не понимаю "WithMany ()".

...