Отображение модели в другую модель с использованием нескольких столбцов - PullRequest
2 голосов
/ 19 марта 2012

Я даже не начинаю узнавать, как найти этот, настолько обнаженный со мной, как я пытаюсь объяснить.

У меня есть две модели:

public class Destinations
{
    public int DestinationsID { get; set; }
    public virtual Navigation Navigation { get; set; }
}

public class Navigation
{
    public int NavigationID { get; set; }
    public string ParameterName { get; set; }
    public int ParameterValue { get; set; }
    public string FriendlyURL { get; set; }
}

Есть что-то еще для них обоих, но это важные биты. Когда я сохраняю пункт назначения, я устанавливаю имя параметра навигации в «Пункт назначения», а значение параметра - в DestinationID.

Я не могу сопоставить пункт назначения с навигацией, поскольку навигация вообще не зависит от пункта назначения. Он может иметь любую модель в качестве ParameterName и ParameterValue в качестве идентификатора этой модели (или обе из них могут быть даже нулевыми, поскольку это относится только к странице, а не к какой-либо дополнительной модели).

Итак, когда я просматриваю один пункт назначения или перебираю список, мне нужно иметь возможность получить Navigation.FriendlyURL. Вот почему я добавил общедоступную виртуальную навигацию Navigation {get; задавать; }. В моем классе отображения, хотя мне нужно иметь возможность получить навигацию в соответствии с ParameterName "Destination" и ParameterValue of Destination.DestinationID. Вот где я полностью застрял.

Я предполагаю, что мне нужно что-то вроде этого:

        this.HasRequired(d => d.Navigation)
            .WithRequiredDependent(WHAT GOES HERE)
            .Map(WHAT GOES HERE)
            .WillCascadeOnDelete(false);

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 19 марта 2012

Если вы хотите отобразить свойство Navigation в Destinations, вы можете попробовать что-то вроде этого

    this.HasRequired(d => d.Navigation)
        .WithMany()
        .WillCascadeOnDelete(false);

Редактировать Вы не можете отобразить это отношение, но вы можете построитьзапрос для получения обоих с ручной фиксацией отношений.

var query = (from d in db.Destinations
        join n in db.Navigations on d.DestinationsID equals n.ParameterValue
                where n.ParameterName == "Destination" 
        select new { d, n }).ToList();

// Display joined groups.
foreach (var group in query)
{
    group.d.Navigation = group.n;
}
...