У меня возникла проблема с заполнением правильных значений в таблице переходов для отношений многих и многих. На изображении ниже я упростил то, что я пытаюсь сделать. «Таблица слева» имеет значения в базе данных, которые я хочу использовать. Таблица справа собирается получать новые записи. Он имеет свойство навигации для таблицы Junction, и то же самое верно для таблицы слева. Таблица переходов имеет свойства навигации для обеих столов на задней панели и , они установлены в соответствии с требованиями.Ef6, Многие для многих, Вставки и Первичные ключи
Когда я создаю новые записи в таблице справа, я также добавить к ней запись в таблице соединения. TOL_ID известен как он сохраняется в базе данных, но TOR_ID будет создан, поэтому неизвестен. Когда я пытаюсь позвонить SaveChanges в моем контексте, он сначала пытается сохранить записи таблицы соединений, прежде чем TOR_ID будут заполнены для записи справа. Я тем не менее, что обозначение свойства навигации как Обязательно заставит EF понять, что TOR_ID должен существовать до создания строки таблицы соединений. Вместо этого он пытается вставить существующий TOL_ID и 0, что дает нарушение при попытке вставить многие таблицы в нужные записи, связанные с одним и тем же идентификатором TOL_ID.
Примечание: Сохранение TOR_IDs первое, а затем соединение с соединительными записями не вариант, так как создание записей таблицы перехода является частью 6 потока типа «Slowly changing dimension».
Вот как это действительно выглядит в коде:
// The newRating is the new object corresponding the Table on the right
var newRating = new ModuleRating()
{
// The moduleRating.RatedDriveUnit already exists in the db
RatedDriveUnit = moduleRating.RatedDriveUnit
};
newModule.Ratings.Add(newRating);
Можете ли вы предоставить код, который обрабатывает записи? –
@ S.Dav Я выложу его выше. – Midas
Вы должны добавить JT_ID в таблицы TOR и TOL. – Mehmet