Связывание отдельных атрибутов с одной и той же таблицей в Entity Framework / .NET MVC - PullRequest
1 голос
/ 19 апреля 2011

Я потратил часы, пытаясь найти ответ на этот вопрос, и оказался пустым.

Я совершенно новичок в .NET и MVC - я закончил учебник по MvcMusicStore и теперь начал работать над болеесложный - но похожий проект.Я говорю это только для того, чтобы объяснить свой низкий уровень опыта и знаний в этой области, и надеюсь, что любые ответы могут быть учтены в этом.

В любом случае, у меня проблема в том, что у меня есть одна таблица «Светильники»который имеет два атрибута «TeamId1» и «TeamId2», оба они сопоставляются с другой таблицей «Team».

Я хочу, чтобы каждый прибор также включал данные Team для Team1 и Team2.До сих пор я использовал метод Include ObjectQuery для выполнения аналогичных операций без проблем.

Однако я обнаружил, что .NET, MVC или Entity Framework или что-то еще не были счастливы, когда я сделал это.После долгих экспериментов я понял, что он будет работать только тогда, когда внешний ключ имеет то же имя, что и таблица, на которую он ссылается.По сути, мой атрибут должен иметь имя «TeamId», иначе он просто не будет работать.Это не было бы проблемой, если бы у меня не было другого атрибута, который также должен был отображаться на эту таблицу.У меня явно не может быть двух атрибутов с одинаковыми именами в таблице.Так что я застрял.

Я могу только предположить, что можно сопоставить таблицу с именем атрибута, отличным от «TeamId», но я не могу найти какую-либо инструкцию / предыдущий пост / документацию, объясняющую, каксделайте это.

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

Я бы предпочел не обойти эту проблему, если это возможно, поскольку не представляется необоснованным, чтобы это было возможно с помощью EF и ObjectQuery.Мне также известно, что я могу создавать запросы вручную, указывая соединения.К сожалению, мой опыт работы с LINQ ограничен, и множественные объединения на одной таблице не сработали каждый раз, когда я пробовал это до сих пор.

Так что мне действительно нужно знать, есть ли какая-то настройка или кодЯ могу использовать для достижения вышесказанного, не прибегая к LINQ или реструктуризации моей таблицы Fixtures.

Редактировать: Screenshot of relevant models

Это изображение показывает соответствующие модели.Как есть: это работает, однако запросы, очевидно, возвращают только один экземпляр команды, связанный со столбцом «TeamId1».Прокомментированный код показывает, что мне нужно также иметь в модели (насколько мне показывал мой ограниченный предыдущий опыт).Так что моя Модель содержит две отдельные команды, связанные с двумя отдельными столбцами.

1 Ответ

1 голос
/ 19 апреля 2011

Я думаю, что вам нужны некоторые пользовательские сопоставления, а не сопоставления «по соглашению», которые поставляются с платформой.

Если вы украшаете и добавляете некоторые свойства в свой прибор, он должен работать нормально.

Как это:

public int TeamId1 { get; set; }
public int TeamId2 { get; set; }

[ForeignKey("TeamId1")]
public Team Team1 { get; set; }

[ForeignKey("TeamId2")]
public Team Team2 { get; set; }
...