Как сохранить детей в таблице, на которую ссылаются сами, после удаления родительской строки? - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть отношение «один ко многим» в таблице, на которую ссылаются сами. Я хочу сохранить детей в таблице после удаления родительской строки из базы данных.

К сожалению, когда я пытаюсь удалить родителя, вот что я получаю:

УДАЛЕНИЕ оператор конфликтует с ограничением SAME TABLE REFERENCE "FK_Libraries_Libraries_TemplateId". Конфликт произошел в базе данных «xxx», таблице «dbo.Libraries», столбце «TemplateId».

И вот моя конфигурация:

public class Library
{
    public int Id { get; set; }
    public int? TemplateId { get; set; }
    public virtual Library Template { get; set; }
    public virtual ICollection<Library> Libraries { get; set; }
}

вот как я пытаюсь смоделировать поведение:

builder.HasMany(library => library.Libraries).WithOne(library => library.Template)
                .HasForeignKey(library => library.TemplateId).IsRequired(false).OnDelete(DeleteBehavior.Restrict);

1 Ответ

1 голос
/ 21 февраля 2020

Я думаю, что вы должны установить для TemplateId детей значение null, прежде чем удалять родителя.

parent.Libraries.Clear();
context.SaveChanges();

Следует удалить связь. Затем вы можете удалить родителя. Дочерние элементы не будут удалены.

Причина: TemplateId - это внешний ключ, указывающий на библиотеки. Это обеспечивает согласованность. Это не позволит вам иметь TemplateId, указывающий на библиотеку (родителя), которая не существует. Таким образом, вы должны отсоединить детей от родителя, прежде чем сможете удалить родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...