#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. Пожалуйста, какое-нибудь решение этой проблемы?