Ядро EF : внешний ключ вложенной сущности не обновляется

#c# #entity-framework-core

Вопрос:

Предположим, что следующая структура таблицы базы данных.

введите описание изображения здесь

Существует три класса моделей, отображающих каждую из этих таблиц следующим образом;

 public class TableOne
{
    public TableOne () 
    {
        tabletwo = new TableTwo();
        tablethree = new TableThree();
    }

    public int col1:1 { get; set; }
    public int col2:2 { get; set; }
    public int col3:3 { get; set; }

    public virtual TableTwo tabletwo { get; set; }
    public virtual TableThree tablethree { get; set; }
}

public class TableTwo
{
    public TableTwo () 
    {
        tablethree = new TableThree();
    }

    public int col2:1 { get; set; }
    public int col2:2 { get; set; }
    // ref => TableOne col 1:1
    public int col1:1 { get; set; }
    
    public virtual TableThree tableThree { get; set; }
}

public class TableThree
{
    public TableThree () 
    {
        tableOne = new TableOne();
        tableTwo = new TableTwo();
    }

    public int col3:1 { get; set; }
    // ref => TableTwo col 2:1
    public int col2:1 { get; set; }
    // ref => TableOne col 1:1
    public int col1:1 { get; set; }
    public TableOne tableOne { get; set; }
    public TableTwo tableTwo { get; set; }
}
 

Предположим, что ссылки установлены правильно DBContext.cs .

Следующий код заполнит модель TableOne и добавит в нее контекст.

 TableOne one = new TableOne();
one.col1:1 = 1;
one.col1:2 = 2;
one.col1:3 = 3;
one.tabletwo.col2:1 = 4;
one.tabletwo.col2:2 = 5;
one.tabletwo.tableThree.col3:1 = 6;
DBContext.TableOne.Add(one);
 

Но, запустив этот код, я получаю эту ошибку:

Невозможно добавить или обновить дочернюю строку: сбой ограничения внешнего ключа (tabletree => col 1:1)

Но эта ошибка не возникает, когда связь между TableThree и TableOne удаляется.

Пожалуйста, рассматривайте приведенный выше код как псевдо. Проект огромен, и я пытаюсь извлечь только самые важные части.

Короче говоря, тот grand child , в данном случае TableThree не получает col1:1 обновленного от grand parent того, в данном случае TableOne . Но col2:1 in TableThree правильно обновляется ключом от непосредственного родителя, TableTwo

Пожалуйста, помогите. Спасибо!

Комментарии:

1. Сбит с толку вашим кодом. Вы определяете tabletwo и tablethree как TableTwo и TableThree типы соответственно, но инициализируете их как HashSet<> . Это отношения «один-один» или «один-много»?

2. Также кажется, что вы пытаетесь вставить a TableOne с внешними ключами в другие таблицы, которые вы не вставляли. Это ограничение FK.

3. Теперь я обновил код, чтобы изобразить отношения один к одному. В исходном коде. это многие ко многим отношениям, таким образом, используя HashSet

4. Пожалуйста, какое-нибудь решение этой проблемы?