2017-02-16 6 views
0

У меня возникла проблема с заполнением правильных значений в таблице переходов для отношений многих и многих. На изображении ниже я упростил то, что я пытаюсь сделать. «Таблица слева» имеет значения в базе данных, которые я хочу использовать. Таблица справа собирается получать новые записи. Он имеет свойство навигации для таблицы Junction, и то же самое верно для таблицы слева. Таблица переходов имеет свойства навигации для обеих столов на задней панели и , они установлены в соответствии с требованиями.Ef6, Многие для многих, Вставки и Первичные ключи

enter image description here

Когда я создаю новые записи в таблице справа, я также добавить к ней запись в таблице соединения. 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); 
+0

Можете ли вы предоставить код, который обрабатывает записи? –

+0

@ S.Dav Я выложу его выше. – Midas

+0

Вы должны добавить JT_ID в таблицы TOR и TOL. – Mehmet

ответ

1

Если следовать Code First ниже классы будут полезны

public class TOL 
{ 
    [Key] 
    public int TOL_ID { get; set; } 
    public int Col1 { get; set; } 

    public ICollection<TOR> Tors { get; set; } 
} 

public class TOR 
{ 
    [Key] 
    public int TOR_ID { get; set; } 
    public int Col1 { get; set; } 

    public ICollection<TOL> Tols { get; set; } 
} 

public class TolTorContext : DbContext 
{ 
    public DbSet<TOL> Tols { get; set; } 
    public DbSet<TOR> Tors { get; set; } 
} 

Если следовать базы данных первого подхода, сделать FK в регистрации Таблица и попробуйте изменить имена имен TOLId, TORId

0

Я сожалею, что проводил время. После некоторого исследования я заметил, что предполагаемый составной уникальный индекс (TOL_ID и TOR_ID) таблицы соединений был установлен неправильно. Вместо этого в TOL_ID и TOR_ID были применены два отдельных уникальных индекса, которые привели к нарушению ограничения, как только одно из этих двух значений появилось дважды.