Связывание отдельных атрибутов с одной и той же таблицей в Entity Framework / .NET MVC
Я потратил часы, пытаясь найти ответ на этот вопрос, и оказался пустым.
Я совершенно новичок в.NET и MVC - я закончил учебник MvcMusicStore и теперь начал работать над более сложным - но похожим проектом. Я только говорю это, чтобы объяснить мой низкий уровень опыта и знаний в этой области, и надеюсь, что любые ответы могут быть учтены по этому поводу.
В любом случае, у меня проблема в том, что у меня есть одна таблица "Fixtures", которая имеет два атрибута "TeamId1" и "TeamId2", которые оба сопоставляются с другой таблицей "Team".
Я хочу, чтобы в каждом приборе были также данные Team для Team1 и Team2. До сих пор я использовал метод Include ObjectQuery для выполнения аналогичных операций без проблем.
Тем не менее, я обнаружил, что.NET или MVC или Entity Framework или что-то еще, не был счастлив, когда я сделал это. После долгих экспериментов я понял, что он будет работать только тогда, когда внешний ключ имеет то же имя, что и таблица, на которую он ссылается. По сути, мой атрибут должен иметь имя "TeamId", иначе он просто не будет работать. Это не было бы проблемой, если бы у меня не было другого атрибута, который также должен был отображаться на эту таблицу. У меня явно не может быть двух атрибутов с одинаковыми именами в таблице. Так что я застрял.
Я могу только предположить, что можно сопоставить таблицу с именем атрибута, отличным от "TeamId", но я не могу найти какую-либо инструкцию / предыдущий пост / документацию, объясняющую, как это сделать.
Я рассмотрел возможность разбить свои данные Fixture и иметь таблицу Fixture, а затем отдельную таблицу для хранения идентификаторов команд, результатов и т. Д., Однако это выглядит немного излишним, учитывая, что в каждом устройстве никогда не будет более двух команд. Поэтому я называю этот План Б.
Я бы предпочел не обойти эту проблему, если это возможно, поскольку не представляется необоснованным, чтобы это было возможно с помощью EF и ObjectQuery. Мне также известно, что я могу создавать запросы вручную, указывая соединения. К сожалению, мой опыт работы с LINQ ограничен, и множественные объединения на одном столе не сработали каждый раз, когда я пробовал это до сих пор.
Так что мне действительно нужно знать, есть ли какая-то настройка или код, который я могу использовать для достижения вышеуказанного, не прибегая к LINQ или реструктуризации моей таблицы Fixtures.
Редактировать:
Это изображение показывает соответствующие модели. Как есть: это работает, однако запросы, очевидно, возвращают только один экземпляр команды, связанный со столбцом "TeamId1". Закомментированный код показывает, что мне нужно также иметь в модели (насколько мне показал мой ограниченный предыдущий опыт). Так что моя Модель содержит две отдельные команды, связанные с двумя отдельными столбцами.
1 ответ
Я думаю, что вы ищете некоторые пользовательские отображения, а не "по соглашению" отображения, которые поставляются с платформой.
Если вы украсите и добавите некоторые свойства в свой прибор, он должен работать нормально.
Как это:
public int TeamId1 { get; set; }
public int TeamId2 { get; set; }
[ForeignKey("TeamId1")]
public Team Team1 { get; set; }
[ForeignKey("TeamId2")]
public Team Team2 { get; set; }