У меня есть проблема с $expand
пункта:
Это работает ->api/Components('XYZ')/Childs
Это не делает ->api/Components('XYZ')?$expand=Childs
я использовал EntityFramework (6.1.3) для отображения представлений в базе данных (только для чтения), а затем созданных контроллеров OData v3 на основе объектов EF. Он отлично работает для большинства таблиц, но проблема возникает, когда связь между объектами не основана на свойства навигации, а на запросе LINQ.
Вот пример кода:
public class ComponentsController : ODataController
{
....
[EnableQuery]
public IQueryable<Component> GetChilds([FromODataUri] string key)
{
var id = db.Components.First(c => c.Id == key).Identity;
return db.ChildComponents.Where(cc => cc.Identity == id).Select(cc => cc.Component);
}
То, что я не могу понять, почему я не могу использовать $expand=Childs
когда (...)/Childs
работает нормально?
EDIT1:
Здесь $ метаданных - свойство навигации «Пользователи» работает с $ расширяться, но «Чайлдс» нет:
<EntityType Name="Component">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="Edm.String" Nullable="false"/>
<Property Name="Type" Type="Edm.String"/>
<Property Name="Name" Type="Edm.String"/>
<Property Name="Identity" Type="Edm.String"/>
<NavigationProperty Name="Users" Relationship="HostingDb.Pandora.HostingDb_Pandora_Component_Users_HostingDb_Pandora_ComponentUser_UsersPartner" ToRole="Users" FromRole="UsersPartner"/>
<NavigationProperty Name="Childs" Relationship="HostingDb.Pandora.HostingDb_Pandora_Component_Childs_HostingDb_Pandora_Component_ChildsPartner" ToRole="Childs" FromRole="ChildsPartner"/>
</EntityType>
<Association Name="HostingDb_Pandora_Component_Users_HostingDb_Pandora_ComponentUser_UsersPartner">
<End Type="HostingDb.Pandora.ComponentUser" Role="Users" Multiplicity="*"/>
<End Type="HostingDb.Pandora.Component" Role="UsersPartner" Multiplicity="0..1"/>
</Association>
<Association Name="HostingDb_Pandora_Component_Childs_HostingDb_Pandora_Component_ChildsPartner">
<End Type="HostingDb.Pandora.Component" Role="Childs" Multiplicity="*"/>
<End Type="HostingDb.Pandora.Component" Role="ChildsPartner" Multiplicity="0..1"/>
</Association>
Странно, что $ expand поддерживается уже. Не могли бы вы показать метаданные? –
@SamXu Я добавил метаданные – micmax93
использование используя mvc api .... как вы его потребляете, angularjs? т.е. то, что вызывает GetChilds .... как выглядит js. – Seabizkit