Как сначала добавить столбец в таблицу ссылок с кодом - PullRequest
2 голосов
/ 13 сентября 2011

У меня есть сущность ResearchDatabase, которая имеет отношение "многие ко многим" с субъектом "Тема". то есть база данных исследований относится к одной или нескольким категориям тем, а категория предметов содержит одну или несколько баз данных исследований.

В моем файле ResearchDatabaseConfiguration у меня есть следующее отображение:

HasMany(rd => rd.Subjects)
                .WithMany(s => s.ResearchDatabases)
                .Map(m =>
                    {
                        m.MapLeftKey("DatabaseId");
                        m.MapRightKey("SubjectId");
                        m.ToTable("DatabaseSubjects");
                    });

ОК, нет проблем. Работает. Создает таблицу ссылок.

Теперь я получил новую спецификацию. Порядок исследовательских баз данных по каждому предмету будет разбит на наиболее релевантные сначала (по мнению пользователя) в алфавитном порядке, а затем второй набор «если вы его не нашли, попробуйте их тоже» базы данных, также в алфавитном порядке. Итак, в принципе, мне нужен еще один столбец, чтобы указать, находится ли база данных в первой или второй группе. Что-то вроде столбца IsPrimary или что-то подобное в самой таблице ссылок. Я надеюсь, что это имеет смысл.

Но как добавить дополнительный столбец в таблицу ссылок, созданную из приведенного выше кода сопоставления?

1 Ответ

3 голосов
/ 14 сентября 2011

Это невозможно. Таблица соединений «многие ко многим» управляется внутри Entity Framework и должна содержать только два ключевых столбца. Вы не можете настроить эту таблицу.

Что вам нужно сделать, это:

  • Ввести новую модель в вашу модель, которая представляет данные в таблице соединений (public class DatabaseSubject или что-то в этом роде). Теперь вы можете настроить эту сущность так, как вам нравится, например, добавить свойство IsPrimary.
  • Удалить отображение "многие ко многим"
  • Вместо этого создайте две взаимосвязи «один ко многим» между DatabaseSubject и ResearchDatabase (одна база данных исследований содержит много объектов DatabaseSubjects) и между DatabaseSubject и Subject (один субъект имеет много объектов DatabaseSubjects).

Более подробное описание такого сценария находится здесь: Сначала создайте код, многие ко многим, с дополнительными полями в таблице ассоциации

...