Entity Framework 6 - Отсутствует таблица с только первичными ключами, ссылающимися на разные таблицы

Мы изучаем Entity Framework 6.1 (от NuGet), когда мы уходим от Linq2Sql. У нас есть небольшая горстка таблиц, которые связывают две отдельные таблицы, как показано ниже.

База данных EF6 Первое поколение

Диаграмма DB:

enter image description here

Обзор схемы:

enter image description here

Когда в Visual студиях, пустой библиотеке классов, делая EDMX файл базы данных First EF6, диаграмма генерирует только таблицы TableA и TableC - TableB не генерируется.

enter image description here

Visual Studios View:

enter image description here

Вы можете видеть, что созданы только TableA и TableC. Технически TableB должен был быть создан, потому что вы хотели бы иметь возможность управлять этими ссылками.

Ассоциация между A и C, показанная на диаграмме:

enter image description here

Я чувствую, что у меня отсутствует вариант или непонимание ключевой концепции Entity Framework. Любая идея, как иметь отсутствующий TableB, сгенерированный с помощью T4? Файл EDMX показывает это, но по какой-то причине он не генерируется в файл .CS с двумя свойствами, указывающими отношение.

Основная причина, по которой нам это нужно, - это расширить шаблон EF6 T4, чтобы добавить некоторые шаблоны factory в соответствие с существующими моделями. Поскольку он не генерирует класс для TableB, мы не получаем автоматически созданный код.

Мысли/предложения? Спасибо.

Ответ 1

Слабые сущности или таблицы объединения не будут генерироваться EF, вам необходимо настроить отношения вручную через свободный API или использовать аннотации данных

Как указано на веб-сайте Microsoft: в соответствии с Соглашением о связи:

Примечание. Если у вас есть несколько отношений между одними и теми же типами (для Например, предположим, что вы определяете классы Person и Book, где Person класс содержит навигацию ReviewedBooks и AuthoredBooksсвойства и класс Book содержит Author и Reviewerсвойства навигации) вам необходимо вручную настроить отношениями с использованием аннотаций данных или свободного API. Для большего информация, см. аннотации данных - отношения и свободный API - Отношения.

Обратитесь к этой ссылке для получения дополнительной информации

ОБНОВЛЕНО

Обходной путь будет работать в случае EDMX (но это требует затрат) следующим образом:

  • Удалить внешние ключи из таблицы соединений в базе данных
  • Обновите EDMX из базы данных
  • Восстановить внешние ключи в таблице соединений

это обходное решение будет работать до тех пор, пока вы не обновите свою модель из базы данных еще раз.

Рекомендуемое решение, сохранить все, как оно было создано EDMX, и узнать больше о том, как использовать операцию crud для этого случая, используя следующие ссылки, которые были "полезны" пользователем "@TravisWhidden"

Ответ 2

Как уже упоминалось @Hadi Hassan, EF не будет "раскрывать" или распознавать реляционные таблицы, которые состоят исключительно из других сущностей.

Работа вокруг:
Если вам нужно только "ПРОЧИТАТЬ данные, которые вы можете

  • Определите view в вашей схеме для TableB.
  • Затем выполните Model (.EDMX) Обновление из БД (выберите "Обновить представления" )
  • Теперь вы сможете запросить данные TableB, используя свой контекст EF.

Если вам нужно изменить записи (Создать, обновить, уничтожить) в TableB

  • Создание хранимых процедур в вашей схеме, соответственно.

  • Импортируйте свои Procs как функцию в вашу модель EF.

  • Теперь вы можете вызывать эти функции из вашего контекста модели для остальных ваших операций CRUD.