【问题标题】:Entity Framework/WebApi unable to retrieve associated results实体框架/WebApi 无法检索关联结果
【发布时间】:2014-03-26 23:53:18
【问题描述】:

我正在尝试使用实体框架和 WebAPI 将数据检索为 XML。 我得到的只是一个空的 Child 容器,我在 OrderItem 中填充了两条 OrderId=1 的记录,但仍然没有,请参阅下面的 <OrderItems/>

<ArrayOfOrder xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication6.Models">
<Order>
<ID>1</ID>
<OrderItems/>
<Username>Test</Username>
</Order>
</ArrayOfOrder>

我的订单模型如下:

public class Order
{
    public Order()
    {
        this.OrderItems = new HashSet<OrderItem>();
    }
    public int Id { get; set; }
    public string Username { get; set; }
    public ICollection<OrderItem> OrderItems { get; set; }

}

我的 OrderItems 模型如下:

public class OrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public int Qty { get; set; }
    public Order Order { get; set; }

}

GetOrders 的控制器代码:

    // GET api/Order
    public IQueryable<Order> GetOrders()
    {
        return db.Orders;
    }

我只是想学习实体框架和 WebApi,这部分似乎是基本功能,我在基本层面上找不到任何可靠的参考。谁能解释我错过了什么?

【问题讨论】:

    标签: asp.net entity-framework asp.net-web-api


    【解决方案1】:

    经过数小时的搜索,我找到了解决方案。基本上我需要包含子数据集。这是在控制器函数中完成的:

    public IQueryable<Order> GetOrders()
    {
        return db.Orders.Include(p => p.OrderItems);
    }
    

    但是这会引入错误:

    类型的对象图 'System.Collections.Generic.HashSet`1[[WebApplication7.Models.OrderItem, WebApplication7,版本=1.0.0.0,文化=中性, PublicKeyToken=null]]' 包含循环并且不能被序列化,如果 参考跟踪已禁用。

    这已通过使用 Datacontracts 为 XML 修复
    更新OrderItem模型:

    using System.Runtime.Serialization;
    [DataContract]
    public class OrderItem
    {
        [DataMember]
        public int Id { get; set; }
        [DataMember]
        public int OrderId { get; set; }
        [DataMember]
        public int Qty { get; set; }
        public Order Order { get; set; }
    
    }
    

    注意 Order 之前没有 [DataMember] 注释
    现在我的结果符合预期:

    <ArrayOfOrder xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication7.Models">
    <Order>
     <Id>1</Id>
     <OrderItems>
      <OrderItem>
       <Id>2</Id>
       <OrderId>1</OrderId>
       <Qty>231</Qty>
      </OrderItem>
      <OrderItem>
       <Id>4</Id>
       <OrderId>1</OrderId>
       <Qty>2314</Qty>
      </OrderItem>
     </OrderItems>
     <Username>first</Username>
    </Order>
    </ArrayOfOrder>
    
    猜你喜欢
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多