Вопрос стар как мир и касается баз данных, но решается и на уровне языка, так что думаю я в нужном форуме. Вопрос совершенно тривиальный, но каждый мог решить его по-своему.
Поясню сабж: есть сущность (Person для примера), она ссылается на страну: Person.CountryID; Есессно, на клиенте хочется видеть название страны. Причём видеть и в списках персон, и в диалоге редактирования(ДР) одной персоны.
Если список стран — сложный и большой (да ещё и часто меняющийся), загружать его на клиента нельзя — вот и имеем два варианта: страны только на сервере и страны, закэшированные на клиенте.
Варианты для списка персон
Загружаем заранее список стран, а при показе списка персон "мэпим" (скажем, через value converter) ИД страны на её название.
Делаем на клиенте LEFT JOIN к странам, а к Person добавляем поле CountryName. (похоже, худший, но вполне рабочий вариант)
Делаем как и в предыдущем пункте, но для LEFT JOIN создаём View на сервере, откуда и загружаем данные.
Варианты для ДР персоны
Загружаем заранее список стран, а в ДР создаём комбобокс для редактирования. С сервера загружаем единственную запись персоны прямо из таблицы, тут всё просто.
Для "большого списка стран":
У Person создаём на каждое поле-ссылку — поле-заголовок. Далее пишем на клиенте все LEFT JOIN'ы и заполняем поля-заголовки. Эти поля на ДР показываются в виде Label, а ссылки редактируются через дополнительный popup список.
Как и в предыдущем пункте, но делаем отдельную View на сервере.
У персоны не создаём никаких доп.полей, а заголовки получаем из БД прямо в лэйблы значений. (тоже кажется плохим вариантом, но бывают ограничения, когда Person менять нельзя)
Это варианты, которые я знаю и минусы которых мне известны. Есть ли ещё какие-либо решения? Интересны любые, даже на первый взгляд глупые варианты, ибо задач — море и распальцованные интыпрайзные решения применимы не везде.
PS
Господа вебдизайнеры, у вас не поддерживаются вложенные списки.