2013-04-09 3 views
0

Я использую EF6, некоторые путаницы при посеве много-много отношений.EF 6 - много-ко-многим - Присоедините таблицу без дубликатов

У меня есть следующие:

User имеет многие сохранены ChartQueries (которые они могут выполнить, чтобы получить диаграмму). A ChartQuery обычно принадлежит только одному пользователю, но существует несколько «общих» ChartQuery s, которые могут выполнять каждый User. В результате я установил для многих отношений, используя таблицу соединений UserChartQuery. Таблицы находятся в базе данных только в порядке от 1 до многих с каждой стороны таблицы соединений.

Однако я не совсем понимаю, как использовать семена или использовать эти отношения. Я не хочу приводить несколько дубликатов «общего» ChartQuery s (дубликат для каждого User). Вместо этого должна быть только одна строка для каждого «общего» ChartQuery, которая является частью каждой коллекции UserSavedChartQueries (вместе с другими, не разделяемыми ChartQuery s, которые принадлежат этому User).

Похоже, я вынужден дублировать для каждого пользователя:

var sharedChartQuery = new ChartQuery { ... }; 
    var nonSharedChartQuery = new ChartQuery { ... }; 

    var userOneChartQueryOne = new UserChartQuery { User = userOne, ChartQuery = sharedChartQuery }; 

    var userTwoChartQueryOne = new UserChartQuery { User = userTwo, ChartQuery = sharedChartQuery }; 
    var userTwoChartQueryTwo = new UserChartQuery { User = userTwo, ChartQuery = nonSharedChartQuery }; 

    context.UserChartQueries.Add(userOneChartQueryOne); 
    context.UserChartQueries.Add(userOneChartQueryTwo); 
    context.UserChartQueries.Add(userTwoChartQueryTwo); 

Так что прежде всего это правильный путь к семени (через UserChartQueries таблицы непосредственно), или я должен семя SavedChartQueries каждый User «s навигационное свойство?

И будет ли этот результат дублироваться в таблице соединений для каждого User? Если это так, то можно избежать этого?

ответ

0

Хорошо, я понимаю, как это работает сейчас. Следующие работы выполняются, как ожидалось:

var userOne = new User {}; 
    var userTwo = new User {}; 
    var chartQuery = new ChartQuery { }; 

     context.Users.Add(userOne); 
     context.Users.Add(userTwo); 
     context.UserChartQueries.Add(new UserChartQuery { User = userOne, ChartQuery = chartQuery }); 
     context.UserChartQueries.Add(new UserChartQuery { User = userTwo, ChartQuery = chartQuery }); 
     context.ChartQueries.Add(chartQuery); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^