导航属性值未添加到实体

时间:2014-10-28 15:22:22

标签: asp.net-web-api odata breeze

我使用服务器端元数据从breeze调用的WebAPI OData v3(5.6.3)服务(没有EF)。不幸的是,我无法在微风中正确加载导航属性。

模型定义如下:

    public class ParentItem
    {
        private readonly List<ChildItem> childItems = new List<ChildItem>();

        [Key]
        public int Id { get; set; }

        public virtual ICollection<ChildItem> ChildItems
        {
            get
            {
                return this.childItems;
            }
        }

        #endregion
    }

    public class ChildItem
    {
        [Key]
        public int Id { get; set; }

        [ForeignKey("ParentItem")]
        public int? ParentItemId { get; set; }

        public virtual ParentItem ParentItem { get; set; }
   }

这些是服务器生成的元数据:

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="1.0" xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx">
  <edmx:DataServices m:DataServiceVersion="3.0" m:MaxDataServiceVersion="3.0" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
    <Schema Namespace="Solutions2Share.Solutions.MeetingManagerWeb.Models" xmlns="http://schemas.microsoft.com/ado/2009/11/edm">
      <EntityType Name="ParentItem">
        <Key>
          <PropertyRef Name="Id" />
        </Key>
        <Property Name="Id" Type="Edm.Int32" Nullable="false" />
        <NavigationProperty Name="ChildItems" Relationship="MyNamespace_ChildItem_ChildItemsPartner" ToRole="ChildItems" FromRole="ChildItemsPartner" />
      </EntityType>
      <EntityType Name="ChildItem">
        <Key>
          <PropertyRef Name="Id" />
        </Key>
        <Property Name="Id" Type="Edm.Int32" Nullable="false" />
        <Property Name="ParentId" Type="Edm.Int32" />
        <NavigationProperty Name="ParentItem" Relationship="MyNamespace_ParentItem_ParentItemPartner" ToRole="ParentItem" FromRole="ParentItemPartner" />
      </EntityType>
      <Association Name="MyNamespace_ChildItem_ChildItemsPartner">
        <End Type="MyNamespace.ChildItem" Role="ChildItems" Multiplicity="*" />
        <End Type="MyNamespace.ParentItem" Role="ChildItemsPartner" Multiplicity="0..1" />
      </Association>
      <Association Name="MyNamespace_ParentItem_ParentItemPartner">
        <End Type="MyNamespace.ParentItem" Role="ParentItem" Multiplicity="0..1" />
        <End Type="MyNamespace.ChildItem" Role="ParentItemPartner" Multiplicity="0..1" />
      </Association>
      <EntityContainer Name="Container" m:IsDefaultEntityContainer="true">
        <EntitySet Name="ParentItems" EntityType="MyNamespace.ParentItem" />
        <EntitySet Name="ChildItems" EntityType="MyNamespace.ChildItem" />
        <AssociationSet Name="MyNamespace_ChildItem_ChildItemsPartnerSet" Association="MyNamespace_ChildItem_ChildItemsPartner">
          <End Role="ChildItemsPartner" EntitySet="ParentItems" />
          <End Role="ChildItems" EntitySet="ChildItems" />
        </AssociationSet>
        <AssociationSet Name="MyNamespace_ParentItem_ParentItemPartnerSet" Association="MyNamespace_ParentItem_ParentItemPartner">
          <End Role="ParentItemPartner" EntitySet="ChildItems" />
          <End Role="ParentItem" EntitySet="ChildItems" />
        </AssociationSet>
      </EntityContainer>
    </Schema>
  </edmx:DataServices>
</edmx:Edmx>

我在客户端上使用webApiOData

breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true);

我执行的查询如下所示:

breeze.EntityQuery().from('ParentItems').expand('ChildItems');

服务器调用返回正确的项目:

{
  "odata.metadata":"http://example.com/api/$metadata#ParentItems","value":[
    {
      "odata.type":"MyNamespace.ParentItem","odata.id":"http://example.com/api/ParentItems(1)","ChildItems@odata.navigationLinkUrl":"http://example.com/api/ParentItems(1)/ChildItems","ChildItems":[
        {
          "odata.type":"MyNamespace.ChildItem","odata.id":"http://example.com/api/ChildItems(1)","ParentItem@odata.navigationLinkUrl":"http://example.com/api/ChildItems(1)/ParentItem","Id":1,"ParentItemId":1
        },{
          "odata.type":"MyNamespace.ChildItem","odata.id":"http://example.com/api/ChildItems(2)","ParentItem@odata.navigationLinkUrl":"http://example.com/api/ChildItems(2)/ParentItem","Id":2,"ParentItemId":1
        }
      ],"Id":1
    }
  ]
}

但ParentItem实体的ChildItems属性为空。

编辑:如果我在执行查询后调用manager.getEntities(),则返回所有父项和子项。

0 个答案:

没有答案