Ответ 1
Хорошо, слишком много часов спустя я нашел решение самостоятельно:
Вариант 1:
В объекте EntityDataSource можно использовать свойство select, которое позволяет создавать произвольные проекции данных из нескольких связанных сущностей/таблиц базы данных (в моем случае: OrderID из объекта Order и City из Объект адреса)
Недостаток: использование select в EntityDataSource делает невозможным использование Insert, Update и Delete в GridView!
Вариант 2:
EntityDataSource должен иметь свойство include, чтобы включить связанное свойство адреса вместе с запрошенными заказами. Разметка выглядит так:
<asp:EntityDataSource ID="EntityDataSourceOrders" runat="server"
ConnectionString="name=MyEntitiesContext"
DefaultContainerName="MyEntitiesContext"
EntitySetName="Order" Include="Address"
EnableDelete="True" EnableInsert="True"
EnableUpdate="True">
</asp:EntityDataSource>
Тогда коллекция колонок GridView может иметь поле шаблона, подобное этому:
<asp:TemplateField HeaderText="City" >
<ItemTemplate>
<asp:Label ID="LabelCity" runat="server" Text='<%# Eval("Address.City") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
Здесь важна Eval. Привязка не работает. Также используйте BoundField в качестве столбца...
<asp:BoundField DataField="Address.City" HeaderText="City" />
... возможно НЕ. Поэтому в GridView невозможно редактировать город (что имеет смысл, потому что его связанная область принадлежит другой таблице и, возможно, ко многим другим заказам). Но можно редактировать плоские поля объекта заказа, а также "AddressID" для заказа другого адреса.